即使AllowDBNull = False,数据集也允许Null值?
我使用VS2008数据集设计器设计了一个数据集。 在其中一个数据表中,我将大多数列的“AllowDBNull”属性设置为False。 但是,如果我为这些列创建包含空值的DataRow,则此数据表会接受此行,而不会出现任何错误。
我在这里不明白吗? 请指教。 谢谢。
然而, 编辑 Mike Spross的优秀解释会带来另一个问题。 如果它们是System.DBNull,我们如何检查文本字段? 令人惊讶的是,DataSets没有将字符串“”视为System.DBNull并抛出exception。 或者不是吗?
编辑我想我已经找到了问题和原因。 我正在初始化DataTable的新行,然后将值填入该行。 初始化行时,字符串的默认值,即“”可能正在该列中填充。 我想是的呢? 关于这个的任何想法?
简短的回答是:
System.DBNull.Value != null
更长的答案是:
在C#中,SQL中NULL
值的概念由System.DBNull
类的Value
属性表示。 在处理数据库时,更熟悉的C# null
实际上并不意味着“空值”。
将数据库列设置为null
,ADO.NET会将列初始化为该列的默认值(例如, int
列将初始化为0)。 也就是说,使用null
实际上可能导致非空值最终在数据库中,因此您不会收到错误。
如果您将数据库列设置为System.DBNull.Value
,则该列实际上将设置为NULL
。 这种情况下, AllowDBNulls == false
将阻止您这样做。
关于你的“奖金”;-)问题:NULL(没有字符串)和“”(空字符串)是两个不同的东西。 因此,以不同方式对待它们是完全合理的。 这是null和DBNull之间的区别,这是搞乱的事情。 如果在设计ADO.NET时可以使用可空类型,事情可能会容易得多。 但在.NET 2.0之前,没有办法表示例如“空整数”。
您是否正确地为这些列分配NULL值或空字符串? 如果未向列分配任何值,则默认为NULL(如果未强制执行DEFAULT约束)。 否则你可以通过以下方式分配NULL值 –
ds.Tables[0].Rows[0]["Col"] = null;
如果要为这些列分配空字符串,则它不等于NULL。
如果你在一个标记为NOT NULLABLE的列中有一个NULL值,它将抛出一个错误 –
列’Col1’不允许空值。
编辑:
通过NOT NULLABLE,我的意思是AllowDBNull = false。
你的代码似乎是对的。 你能尝试修剪文字吗?
这是整个代码 –
上述就是C#学习教程:即使AllowDBNull = False,数据集也允许Null值?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
DataTable dt = new DataTable(); DataColumn column = new DataColumn("Col1"); column.AllowDBNull = false; dt.Columns.Add(column); DataRow dr = dt.NewRow(); dr["Col1"] = null; dt.Rows.Add(dr);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/997690.html