asp.net(C#)中 DataTime 赋空值的研究
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 赋空值的研究的更多相关文章
- 解决asp.net(C#)中 DataTime 空值 null为0001-01-01
SqlServer中的datetime类型的空值和c#中的DateTime的空值的研究 在SqlServer 2000中datetime 的空值即默认值为1900-01-01 00:00:00,C#中 ...
- 时间类型(DataTime)赋空值
暂时只发现这一个方法 如果直接Datetime time=DBNull.Value;会报null与DataTime没有隐式转换 SqlCommand cmd = SqlCommand(conn); / ...
- Bash 中为 _ 变量赋空值的三个场景
$_ 有好几个功能,我们最常用的是用它来获取“刚刚执行过的命令的最后一个参数”这个功能,比如下面这样: $ ls ~/Downloads/very/long/dir/ # ls 到某个目录看看有没有 ...
- Asp.Net MVC中DropDownListFor的用法(转)
2016.03.04 扩展:如果 view中传入的是List<T>类型 怎么使用 DropList 既然是List<T> 那么我转化成 T List<T>的第一个 ...
- Asp.Net MVC中DropDownListFor的用法
在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...
- ASP.NET WebForm中前台代码如何绑定后台变量
转载自 http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有& ...
- 转:Asp.Net MVC中DropDownListFor的用法
在Asp.Net MVC中可以用DropDownListFor的方式来让用户选择已定列表中的一个数值.用法不复杂,这里简单做一个记录. 首先我们要定义一个 Model ,用户在 DropDownLis ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- ASP.NET MVC中DropDownList的使用
Asp.net MVC中的DropDownLists貌似会让一开始从Asp.net Forms转过来的程序员造成不少迷惑.这篇文章讲述了为了使用DropDownLists,你需要在Asp.Net MV ...
随机推荐
- Internet History, Technology and Security (Week 9)
Week 9 Security: Web Security We are now on the second to last week of the class and finishing up ou ...
- JabRef学习笔记(一)
JabRef简介 JabRef is an open source bibliography reference manager. The native file format used by Jab ...
- background的使用
先简单的介绍颜色表示法 一共有三种:单词,rgb表示法,十六进制表示法 rgb:红色 绿色 蓝色 三原色 光学显示器,每个像素都是有三原色的发光原件组成的,靠明亮度不同调成不同的颜色的 有逗号隔开,r ...
- Class.getResourceAsStream 和 ClassLoder.getResourceAsStream 的区别
问题描述 最近学习MyBaits时用到了 InputStream Resources.getResourceAsStream(String resource)来读取MyBatis配置文件,为了方便使用 ...
- Handler,Looper,HandlerThread浅析
Handler想必在大家写Android代码过程中已经运用得炉火纯青,特别是在做阻塞操作线程到UI线程的更新上.Handler用得恰当,能防止很多多线程异常. 而Looper大家也肯定有接触过,只不过 ...
- 关于IT个人看法
对于理科生来说,理论和技术都是相当重要的,我很爱钻牛角尖,但是请理解‘固执的我’, 本人选择IT行业,其实也是偶然,带着质疑的眼光,成为了众多IT男中毫无‘特色’的一员,回忆 学习阶段,逐渐认识了IT ...
- Jmeter—添加断言 判断接口响应数据是否符合预期
发出请求之后,通过添加断言可以判断响应数据是否是我们的预期结果. 1 在Jmeter中发送一个状态返回200的http请求(参数故意输入错误).结果肯定是不是返回200啦. 但结果树中http请求的图 ...
- MT【137】多少个?
数列\(\{a_n\}\)共11项,\(a_1=0,a_{11}=4\),且\(|a_{k+1}-a_{k}|=2,k=1,2,\cdots,10\) 求满足条件的不同的数列的个数______ 解答: ...
- javascript和php使用ajax通信传递JSON
JS和PHP直接通信常用ajax完成,以实现js上UI的动态变化.通信使用JSON或者XML传递数据.下面详细描述两者直接JSON字符串的传递. 下面案例是要传递这样的json数据: { " ...
- [NOIP2011]玛雅游戏
闲的没事干,出来写一下早两天刷的一道搜索题NOIP2011玛雅游戏,其实这道题还是比较水的,虽然看起来可能有点复杂. 方法很简单粗暴,直接根据规则模拟就行. 话不多说直接上代码(关键操作在注释中有提到 ...