2017-07-13 10 views
0

プロパティに値を代入するときにIF条件を1行書くようにしています。 私はtype_of_documentsがNULL可能整数である、VB.NETでこれらの構文を試してみた:データ行にヌル値を代入する

1) vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, SqlTypes.SqlInt32.Null, vehicle.type_of_documents) 
2) vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, DBNull.Value, vehicle.type_of_documents) 
3) vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, Nothing, vehicle.type_of_documents) 

まあ、私は1つのラインでこれを行うには少し強引です。どういうわけか、これらのすべての構文は、私のデータベースにnull値を割り当てることができませんでした。構文1 & 2がキャスト整数例外をスローしました。構文3にはエラーはありませんが、データベースの変更/更新値はありません(前と同じ)。

誰かが私に良い構文を表示できますか?私はVB.NETに実際には入っていないので予め

+0

の場合における条件:のように最初のパラメータは、 "通常"の場合。 trueの場合は2番目のパラメータ、falseの場合は3番目のパラメータ: 'vehicle.type_of_documents = If(vehicle.type_of_documentsはNothing、SqlTypes.SqlInt32.Null、vehicle.type_of_documents)' – muffi

+0

はい、構文条件にエラーが発生しました – andrefadila

+0

表示私たちはエラー。 – muffi

答えて

0

Ifオペレータに

おかげで、すなわち、それは第二および第三の引き数の型から推測される戻り型、基本的に汎用です。つまり、これらの2つの引数は同じ型でなければならず、もう一方は他の型から割り当てる必要があります。

vehicle.type_of_documents = If(vehicle.Istype_of_documentsNull, 
           CObj(DBNull.Value), 
           vehicle.type_of_documents) 

今すぐ最初の引数がタイプ Objectに指定されていること、2つの引数がタイプを共有:シンプルなキャストはあなたが必要とするすべてです。

0

Ifの戻り値の型は、結果パラメータ(@jmcilhinneyは既に回答)から推測されます。
IntegerSqlTypes.SqlInt32.NullDbNull.Valueタイプにキャストできないため、1と2のサンプルでキャスト例外が発生します。
NothingIntegerとして導入されるため、3番目のサンプルコンパイルは、Integerのデフォルト値であり、これは0になります。

type_of_documentsに値がない場合は、DbNull.Valueを返信したい場合は、一般的なタイプのキャスト結果(Object)が必要です。

代わりのIf方法あなたはSqlParameters

Public Module Extensions 
    <Extension> 
    Public Function GetValueOrDbNull(this As Integer?) As Object 
     If this.HasValue Then Return this 
     Return DBNull.Value 
    End Function 
End Module 

と利用で必要とされる一般的なタイプ(オブジェクト)を返す拡張メソッドを作成することができ、それ

Dim sqlValue = vehicle.type_of_documents.GetValueOrDbNull() 
関連する問題