SqlServer中的datetime類型的空值和c#中的DateTime的空值的研究

轉:SqlServer中的datetime類型的空值和c#中的DateTime的空值的研究
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

[url]
http://blog.csdn.net/jxqvip/article/details/6565044
[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章