|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
写软件都是想的时间比写的时间要长的.如果反过来了就得看看是什么原因了.另外大家可以回去问问公司里的小MM.(一般企业里,跟你们交付软件接触得最多的是她们)明天不但被外包,还要跑到虹桥机场往协助实行。惋惜离开这里又好象没有甚么事干。。:)恰好能够写写Blog。
恰好这几天写数据库操纵对照多,是时分写写关于DBNull的器材了。
DBNull在DotNet是独自的一个范例System.DBNull。它只要一个值DBNull.Value。DBNull间接承继Object,以是DBNull不是string,不是int,也不是DateTime。。。
可是为何DBNull能够暗示数据库中的字符串,数字,或日期呢?缘故原由是DotNet贮存这些数据的类(DataRow等)都是以object的情势来贮存数据的。
关于DataRow,它的row[column]前往的值永久不为null,要末就是详细的为column的范例的值。要末就是DBNull。以是row[column].ToString()这个写法永久不会在ToString那边产生NullReferenceException。
DBNull完成了IConvertible。可是,除ToString是一般的外,其他的ToXXX城市抛出不克不及转换的毛病。
在IDbCommand(OleDbCommand,SqlCommand...)的ExecuteScalar的前往值中,情形能够如许剖析:
select1如许前往的object是1
selectnull如许前往的是DBNull.Value
selectisnull(null,1)前往的是1
selecttop0idfromtable1如许前往的值是null
selectisnull(id,0)fromtable1where1=0前往的值是null
这里ExecuteScalar的划定规矩就是,前往第一列,第一行的数据。假如第一列第一行不为空,那末ExecuteScalar就间接对应的DotNet的值。假如有第一行,可是第一列为空,那末前往的是DBNull。假如一行都没有,那末ExecuteScalar就前往null
划定规矩就是如许的。这里简单犯的一个毛病是,把ExecuteScalar前往DBNull与null的情形搅浑,比方:
stringusername=cmd.ExecuteScalar().ToString();
除非你以为cmd实行后,一定最少有一行数据,不然这里就会堕落。
又大概selectidfromusertablewhereusername=@name如许的sql语句,假如找不到纪录,那末ExecuteScalar则会前往null,以是万万不要
intuserid=Convert.ToInt32(cmd.ExecuteScalar());
大概你会如许写SQL语句:selectisnull(id,0)fromusertablewhereusername=@name
可是intuserid=Convert.ToInt32(cmd.ExecuteScalar());仍然会堕落,由于下面的语句不建立时,仍旧是不前往任何行。
关于IDbDataParameter(OleDDbParameter,SqlParameter..)的Value,假如为null,则代表该参数没有指定,大概是代表DEFAULT。假如为DBNull.Value,则代表SQL中的NULL
以是,假如你要挪用存储历程,内里有参数@valnvarchar(20)="AABB",
那末cmd.Parameters["@val"].Value=null代表利用这个默许的"AABB"
而cmd.Parameters["@val"].Value=DBNull.Value代表利用NULL来传给@val
你能够用Convert.IsDBNull来判别一个值是不是DBNull。注重Convert.IsDBNull(null)是false。
备注:以上的SQL语句满是指SQLSERVER2000的。其他的数据库是不是为一样的举动,我不断定。
(先写到这里,想到再增补)
</p>只要你想学,就没什么优缺点,上面那位大哥已经把网上的评论说了,但我认为想学哪个都一样,不然它就不可能在当今时代数字艺术方面存活到今天 |
|