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!6667864a1ffeabc7!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

asp.net(C#)中 DataTime 赋空值的研究的更多相关文章

  1. 解决asp.net(C#)中 DataTime 空值 null为0001-01-01

    SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00,C#中 ...

  2. 时间类型(DataTime)赋空值

    暂时只发现这一个方法 如果直接Datetime time=DBNull.Value;会报null与DataTime没有隐式转换 SqlCommand cmd = SqlCommand(conn); / ...

  3. Bash 中为 _ 变量赋空值的三个场景

    $_ 有好几个功能,我们最常用的是用它来获取“刚刚执行过的命令的最后一个参数”这个功能,比如下面这样: $ ls ~/Downloads/very/long/dir/  # ls 到某个目录看看有没有 ...

  4. Asp.Net MVC中DropDownListFor的用法(转)

    2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T  List<T>的第一个 ...

  5. Asp.Net MVC中DropDownListFor的用法

    在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...

  6. ASP.NET WebForm中前台代码如何绑定后台变量

    转载自 http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有& ...

  7. 转:Asp.Net MVC中DropDownListFor的用法

    在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...

  8. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  9. ASP.NET MVC中DropDownList的使用

    Asp.net MVC中的DropDownLists貌似会让一开始从Asp.net Forms转过来的程序员造成不少迷惑.这篇文章讲述了为了使用DropDownLists,你需要在Asp.Net MV ...

随机推荐

  1. dedecms 织梦本地调试 后台反映非常慢的处理办法

    最近需要做几个企业站,所以呢,考虑了一下,没有用phpcms,而选择了 织梦.毕竟么,织梦用来做企业站还是比较合适的.好了,进正题: 在本地调试的时候,会非常的卡顿.调试的方法如下: 安装目录/dat ...

  2. [转]正确设置nginx/php-fpm/apache权限

    核心总结:php-fpm/apache 进程所使用的用户,不能是网站文件所有者. 凡是违背这个原则,则不符合最小权限原则. 根据生产环境不断反馈,发现不断有 php网站被挂木马,绝大部分原因是因为权限 ...

  3. 【Java线程】SwingWorker的用法

    Swing应用程序员常见的错误是误用Swing事件调度线程(Event DispatchThread,EDT).他们要么从非UI线程访问UI组件:要么不考虑事件执行顺序:要么不使用独立任务线程而在ED ...

  4. 半夜思考之查漏补缺 , Spring 中的 Bean 继承机制

    这里的继承 , 不是 Java 中的继承 , 下面就总结下 Bean继承与Java继承的区别: Spring 中的子类 Bean 和父 Bean 可以是不同类型 , 但是 Java 中的继承则可保证子 ...

  5. 优先级:P0

    优先级:P0 Priority https://www.zhihu.com/question/23353333?sort=created 一个团队, 每周需求pk的例会,每个产品经理都要给自己提出的需 ...

  6. delphi手动创建dataset并插入值

    unit Unit1; interface uses  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, Syste ...

  7. 【.Net】c# 让double保留两位小数

    1.Math.Round(0.333333,2);//按照四舍五入的国际标准2.    double dbdata=0.335333;    string str1=String.Format(&qu ...

  8. SPOJ_SUBLEX

    经典题目:给一个字符串,求字典序第k小的子串是什么. 涉及子串问题,上自动机. 首先我们可以用记忆化搜索的方法,求出到达某一个状态后,能产生多少个新状态. 首先,到达这个状态就不走了,这肯定是一种状态 ...

  9. java 静态类与静态方法应用场景

    静态类:工具类 例如 Array.sort(arry) 静态方法:设置文件名

  10. 为什么有时候访问某些加密https网站是不需要证书的? https? ssl?

    根证书是CA颁发给自己的证书, 是信任链的起点 1.所有访问https的网站都是需要证书的. 2.对于某些网站,尤其是证书颁发机构的网站,操作系统自动添加了这些网站访问需要的证书到证书管理器中,所以就 ...