在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(在甚至在尝试将其设置为空白之后)。

+0

对不起,应该提到,我把我的Gewicht字段声明为Nullable,所以我实际上可以将它设置为Nothing,但是CommandBuilder在将它插入到数据库时没有考虑到这一点。 – Mekswoll 2012-01-04 01:50:09

+0

嗯 - 然后看到这个线程:http://stackoverflow.com/questions/5868313/ado-net-commandbuilder-insertcommand-and-default-constraints。我自己不使用命令生成器 - 因为我发现它不会节省太多时间。我自己写简单的查询,或者如果它更复杂 - 使用NHibernate。 – Origin 2012-01-04 01:53:11

+0

好的,谢谢,我会在那里看看。我可以问一下解析吗?我原本是按照你的说法做的,但是它给了我一个错误,告诉我它不允许Ex从Double转换?到Double,所以我把CDbl(klant.Gewicht),但是如果我之后输出klant.Gewicht的值,它没有改变。 – Mekswoll 2012-01-04 01:56:01