在VB.NET的Access中插入空字符串字段
问题描述:
我在Windows窗体中有几个文本框。其中一个文本域允许为NULL。当我为每个字段输入一个值时,它全部插入,没有问题。当我离开字段(txtGewicht)为空时,我似乎无法在Access数据库中插入NULL。在VB.NET的Access中插入空字符串字段
If Double.TryParse(txtGewicht.Text, 0) Then
klant.Gewicht = Double.Parse(txtGewicht.Text)
Else
klant.Gewicht = Nothing
End If
这就是我得到:
“无法设置列 'Gewicht' 为NULL,请使用的DBNull,而不是”
所以我改变了 '无' 到DBNull.value,但随后告诉我System.DBNull不能转换为Double类型。
答
A Double
是一个值类型 - 不是引用类型。因此,默认情况下它不是可空的。
如果klant.Gewicht声明,像这样:
Public Property Gewicht as Double
那么它永远不会是“空”至于命令生成器而言。
甚至明确地说:
d = nothing
没有任何影响,它仍然是0.0
你可以尝试实现你的财产作为可空(双)。
这将允许该属性被视为“空”。我不确定CommandBuilder是否会自动获取,但这是一个开始。
此外 - 我发现你的方法Double.TryParse
有趣。第二个参数的要点是将解析结果(如果成功)存储到。
你的代码可以简化为:
If Not Double.TryParse(txtGewicht.Text, klant.Gewicht) Then
klant.Gewicht = ' Some Default Value
End If
编辑:
如果您已通过在调试器的代码阶梯,你可能已经注意到,klant.Gewicht为0.0(在甚至在尝试将其设置为空白之后)。
对不起,应该提到,我把我的Gewicht字段声明为Nullable,所以我实际上可以将它设置为Nothing,但是CommandBuilder在将它插入到数据库时没有考虑到这一点。 – Mekswoll 2012-01-04 01:50:09
嗯 - 然后看到这个线程:http://stackoverflow.com/questions/5868313/ado-net-commandbuilder-insertcommand-and-default-constraints。我自己不使用命令生成器 - 因为我发现它不会节省太多时间。我自己写简单的查询,或者如果它更复杂 - 使用NHibernate。 – Origin 2012-01-04 01:53:11
好的,谢谢,我会在那里看看。我可以问一下解析吗?我原本是按照你的说法做的,但是它给了我一个错误,告诉我它不允许Ex从Double转换?到Double,所以我把CDbl(klant.Gewicht),但是如果我之后输出klant.Gewicht的值,它没有改变。 – Mekswoll 2012-01-04 01:56:01