dbnull和null_NULL和DBNull的区别分析
測(cè)試準(zhǔn)備:
1.新建一個(gè)表
CREATE TABLE `cacb` (
`CA` varchar(255) DEFAULT NULL,
`CB` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.新建一個(gè)控制臺(tái)項(xiàng)目,主函數(shù)實(shí)現(xiàn)如下:
#region Mysql DBNull測(cè)試
string con = "server=localhost;User Id=root;database=mytest;password=my88888;persist security info=True;charset=utf8;";
bool flg = null is object;//false
bool fdb = DBNull.Value is object;//true
string sql = "SELECT * from CACB? limit 1,1;";
using (MySqlConnection mc=new MySqlConnection(con))
{
mc.Open();
using (MySqlCommand com=new MySqlCommand(sql,mc))
{
var result= com.ExecuteScalar();
if (result==DBNull.Value)
{
Console.WriteLine("這個(gè)確定是數(shù)據(jù)庫(kù)空的了");
}
if (result==null)
{
Console.WriteLine("這里是null了.");
}
}
}
#endregion
3.結(jié)論:DBNull是針對(duì)那些查詢出來的值為Null的數(shù)據(jù),繼承Object,null是.net里面的一種類型數(shù)據(jù)不繼承Object,說白了就是,DBNull是數(shù)據(jù)庫(kù)的默認(rèn)空值,而null是.net的默認(rèn)值空值。那么row[column].ToString() 這個(gè)寫法永遠(yuǎn)不會(huì)在ToString那里發(fā)生NullReferenceException。
需要引起注意的是: ExecuteScalar的規(guī)則是,返回第一列,第一行的數(shù)據(jù)。假如有第一行,但是第一列為空,那么返回的是DBNull?。假如一行都沒有,那么ExecuteScalar就返回null,假如第一列第一行不為空,那么ExecuteScalar就直接對(duì)應(yīng)的DotNet的值。
所以我們?cè)诓樵償?shù)據(jù)的結(jié)果的時(shí)候要注意直接用 dbresult==null 作為條件判斷是容易出問題的。
可以參考下前輩們的探索:
總結(jié)
以上是生活随笔為你收集整理的dbnull和null_NULL和DBNull的区别分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bios安全选项密码怎么设置在哪里 如何
- 下一篇: cdr文件怎么写入u盘 &quo