2012-01-04 9 views
1

私はWindowsフォームでいくつかのテキストフィールドを持っています。これらのテキストフィールドの1つはNULLにすることができます。すべてのフィールドに値を入力すると、そのフィールドはすべて挿入され、問題はありません。フィールド(txtGewicht)を空白のままにすると、AccessデータベースにNULLを挿入できないように見えます。VB.NETを使用したAccessで空の文字列フィールドをnullに挿入する

If Double.TryParse(txtGewicht.Text, 0) Then 
     klant.Gewicht = Double.Parse(txtGewicht.Text) 
    Else 
     klant.Gewicht = Nothing 
    End If 

これは私が得るものです:

"をNULLに列 'Gewicht' を設定することはできません、代わりにはDBNullを使用してください" だから私は、それがその後、DBNull.Valueをに '何' を変更しませんが、 System.DBNullをDouble型に変換することはできません。

答えて

0

Doubleは参照型ではありません。したがって、デフォルトではNULL可能ではありません。

klant.Gewichtはそうのように宣言されている場合:

Public Property Gewicht as Double 

それは「ヌル」になることはありません限り、コマンドビルダーを懸念しています。

がさえ、明示的に言って:

d = nothing 

は効果がありません、それはまだあなたは(ダブルの)空白可能としてあなたの財産を実装してみてください0.0

になります。

これにより、プロパティを「NULL」と見なすことができます。 CommandBuilderがこれを自動的に取り上げるかどうかはわかりませんが、それは始まりです。

また、Double.TryParseの方法が面白いと思います。 2番目の引数のポイントは、(成功した場合)解析結果を格納することです。

あなたのコードはに短縮することができます。編集

If Not Double.TryParse(txtGewicht.Text, klant.Gewicht) Then 
     klant.Gewicht = ' Some Default Value 
End If 

:あなたは、デバッガでコードをステップした場合

、あなたはklant.Gewichtは0.0(だったことに気づいたかもしれませんデフォルト値)に設定することができます。

+0

申し訳ありませんが、私はGullichtフィールドをNullableとして宣言していますので、実際にNothingに設定することができますが、CommandBuilderはデータベースに挿入する際にその事実を認識しません。 – Mekswoll

+0

ああ - このスレッドを参照してください:http://stackoverflow.com/questions/5868313/ado-net-commandbuilder-insertcommand-and-default-constraints私はコマンドビルダーを自分で使っていません。私は単純なクエリを自分で書くか、もっと複雑な場合はNHibernateを使います。 – Origin

+0

よろしくお願いします。私は構文解析について尋ねることができます。あなたが言ったように私はもともとそれをしていましたが、それはダブルからのexlpicit変換を許可していないと私に言ってエラーを与える? Doubleにするため、CDbl(klant.Gewicht)を入れますが、後でklant.Gewichtの値を出力すると変更されません。 – Mekswoll

関連する問題