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

eg:

#Eval("CANCELACCT_DATE").ToString() == DateTime.MinValue.ToString() ? string.Empty :。。。。。

最新文章

  1. 安装过程错误[INS-30131]
  2. Qt——组件位置随窗口变化
  3. nginx跨域配置
  4. 关于提高webview里下载apk安装包成功率的研究
  5. 通过Nginx部署Django(基于ubuntu)
  6. Windows Server 2008 DNS服务器安装与配置
  7. redis使用日志(一) 安装,调试
  8. mac下app store 无法完成您的购物操作
  9. centos 安装php
  10. C#实现邮件发送功能
  11. kotlin, 一种新的android平台一级开发语言
  12. 函数调用模式,this指向
  13. Java文件File类学习总结
  14. Java中Iterator(迭代器)实现原理
  15. css 长用点
  16. 用Visual Studio Code写Node.j
  17. ubuntu 系统判断优盘的指定文件存在
  18. PI接口无法使用.net4以上的解决方法:无法嵌入互操作类型“PISDKClass”。请改用适用的接口。
  19. fastq-to-fasta转换及fasta拆分、合并
  20. windbg分析执行在64位环境下的32位程序的dump

热门文章

  1. ABP 初探 之 AbpSession 扩展
  2. FilterDispatcher已被标注为过时解决办法 >>> FilterDispatcher <<< is deprecated!
  3. Dom随手记
  4. 【单页应用之通信机制】view之间应该如何通信
  5. 轻松掌握:JavaScript策略模式
  6. 实现bootstrap布局的input输入框中的图标点击功能
  7. mysql时间加减函数
  8. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(六)地图搜索模块
  9. Android动画例子。
  10. JSPatch使用小记