我在Windows窗体中有几个文本字段。其中一个文本字段允许为NULL。当我为每个字段输入一个值时,它全部插入,没问题。当我将字段(txtGewicht)留空时,我似乎无法在Access数据库中插入NULL。
If Double.TryParse(txtGewicht.Text, 0) Then
klant.Gewicht = Double.Parse(txtGewicht.Text)
Else
klant.Gewicht = Nothing
End If
这就是我得到的:
“无法将列'Gewicht'设置为NULL,请改用DBNull”
所以我将'Nothing'更改为DBNull.value,但它告诉我System.DBNull无法转换为Double类型。
答案 0 :(得分:0)
Double
是值类型 - 不是引用类型。因此,默认情况下它不可为空。
如果声明klant.Gewicht如此:
Public Property Gewicht as Double
然后就命令构建器而言,它永远不会是“null”。
甚至明确说:
d = nothing
无效,仍为0.0
您可以尝试将您的属性实现为Nullable(Double)。
这将允许该属性被视为“空”。我不确定CommandBuilder是否会自动接收,但这是一个开始。
另外 - 我发现你Double.TryParse
的方法很有趣。第二个参数的要点是将解析结果(如果成功)存储到。
您的代码可以缩短为:
If Not Double.TryParse(txtGewicht.Text, klant.Gewicht) Then
klant.Gewicht = ' Some Default Value
End If
修改强>
如果您已经调试了调试器中的代码,您可能已经注意到klant.Gewicht即使在尝试将其设置为空之后仍为0.0(默认值)。