asp.net(C#)中 DataTime 赋空值

本文探讨了SQLServer与C#中日期类型不一致的问题,提出了通过改变数据库字段类型、使用object类型属性及SQL语句判断等方法来解决数据一致性问题,并详细解释了每种方法的原理和应用场景。


SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究数据库

      在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00,C#中DateTime的空值是最小值

0001-01-01 00:00:00,对于数据库的插入,更新为空值的日期值来说多少有点不如人所愿。比如说我插入的是空

值我取出的也要是空值,但SqlServer偏偏给了我一个默认值。有点无奈。对于如何协调二者,给我带来了不少麻烦

引起这样的原因是:DateTime和Int,Double一样都是值类型,必须有一个值。

解决的办法:

1.从数据库的角度:把该字段的类型改为自定义的字符串型,该字符串格式为日期样式。这种办法比较简单,其实就

是字符串型,插入时对插入的字符串做日期的正则判断。

2.这种方法是从网上搜索出于:http://treexyz.spaces.live.com/blog/cns!1ffeabc7!300.entry

对数据类型null的处理

当C#与SQL Server数据类型定义不一致时需要怎么处理呢?

例如一个DateTime,当DB中该字段可以为空时,要求它既能用C#的DateTime赋值,又可以赋SQL Server的null值。

我采用的解决方法是,在Model对应的类中,将该字段对应的property的数据类型设为object。

赋值时,判断,若是空值则赋给DBNull.Value。

取值时,判断,若取到DBNull.Value则显示null,否则要进行一次数据转换。这是为了DA在对DB操作时,若将此字段

作为参数,只需要将get到的值直接赋给salParameter即可。(若model的get不转换,则DA中要判断是否要转换。

因为C#的DBNull和DateTime均可赋给sqlDBType.DateTime;反之,sql中取到的空值是以DBNUll.Value出现的,不能

赋给C#的DateTime。

       Forum有一个很大的特点,就是在调用DB.cs的方法时,参数的类型几乎都是object。在sp中再仔细定义各参

数的格式,由sql自己转换。对于可空的参数,在sp中定义=null即可。Forum传一个null参数的情况很多,总是在接

收方去判断参数,有些参数是null写入数据库的;但是有些参数如果为null是有其它意义的,需要条件分支代码去处

理。而我习惯于参数首先初始化,如果有不同情况共用同一个方法则增加一个参数用于判断。我认为使参数为null也

有实际意义不是很好的办法,因为会造成一些不明意义的条件分支,对以后的升级和维护造成潜在的危险。

3.如下语句能实现插入:

insert into Employees (lastname,firstname,hiredate) values ('hu','shuai',null),

insert into Employees (lastname,firstname,hiredate) values ('hu','shuaishuai','')

有着明显不同的结果。可以在Sql 语句上实现。但在程序中,特别是面向对象的程序设计中,在加上三层架构的一些

问题。实现起来颇为不便。所以我正在努力寻找一种方法巧妙的实现之,也希望大家给点建议。

三 。

最简单的方法:

在页面赋一个默认日期

在sql语句中参数赋值时判断参数值是否等于默认日期 如果等于为参数赋值DBNull.Value


http://hi.baidu.com/jbgoyhuognblryq/item/ebefe3865cb6268c4414cf4f

C# 中 `DateTime.Now` 是一个静态属性,用于动态获得系统当前日期和时间。以下是一些常见的使用方法: ### 获取不同格式的时间 ```csharp using System; class Program { static void Main() { // 获取长时间格式字符串 string longTime = DateTime.Now.ToLongTimeString().ToString(); Console.WriteLine(longTime); // 获取短时间格式字符串 string shortTime = DateTime.Now.ToShortTimeString().ToString(); Console.WriteLine(shortTime); // 自定义时间格式字符串 string customTime = DateTime.Now.ToString("hh:mm:ss"); Console.WriteLine(customTime); // 获取一天中的时间部分 string timeOfDay = DateTime.Now.TimeOfDay.ToString(); Console.WriteLine(timeOfDay); } } ``` 上述代码中,展示了通过 `DateTime.Now` 获取不同格式时间的方法,其中 `ToLongTimeString()` 返回长时间格式,`ToShortTimeString()` 返回短时间格式,`ToString("hh:mm:ss")` 是自定义格式,`TimeOfDay` 返回一天中的时间部分 [^1]。 ### 进行日期计算 ```csharp using System; class Program { static void Main() { // 计算特定日期 string calculatedDate = DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 22)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString(); Console.WriteLine(calculatedDate); } } ``` 此代码通过 `DateTime.Now` 进行了日期的计算,`AddMonths` 用于添加或减去月份,`AddDays` 用于添加或减去天数,最终将结果转换为短日期格式字符串 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值