2012-01-04 63 views
1

我在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類型。

回答

0

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