2009-07-14 23 views
20

VB.NETでNullable型を使用できますか?もしそうなら、SQL ServerでNULLを受け入れるフィールドで使用できるNullable Integerを持つことが可能ですか?例が分かるだろう。VB.NETのNullable型?

答えて

34

VBの整数にNull,NothingまたはDBNullを割り当てることはできません。 Nullable(Of Integer)を使用するか、またはObjectの整数値(Nothing)を使用してください。

+2

実際には、あなたはVB.NETで整数に何を割り当てることはできません。 'Dim a As Integer = Nothing' その後、以下が成り立ちます。 ' a = 0' – Jochen

7

.NETの整数(System.Int32など)は直接nullableではありません。しかし、Nullable-of-Tがあるので、値型のnullable-ishを作ることができます。 null/Nothingではなく、DBNullに対してデータベースをチェックする必要があります。

はい、非常に似たようなことができます。

1

いいえ。挿入または更新クエリを変更して、その値を追加(または更新)しないで、データベースにnullを取得する必要があります。

43

VB.Netにはnull可能な型がありますが、次の2通りの方法で宣言できます。例Nothingの数で

Dim iNullable As Integer? 

または

Dim iNullable As Nullable(Of Integer) 
+1

実際には[3つの方法]があります(https://msdn.microsoft.com/en-us/library/ms235245) .aspx):Dim iNullable?整数として –

3

デフォルト値に変換されます。 nullと同じ方法でNothingを使用するには、正しいnull可能な型にキャストする必要があります。 (質問以下のコメントに尋ねたとして)NULLに等しいSQLのデフォルト値を使用することです

Dim str As String 
Dim int As Nullable(Of Integer) ' or use As Integer? 
Dim reader As SqlDataReader 
Dim colA As Integer = reader.GetOrdinal("colA") 
Dim colB As Integer = reader.GetOrdinal("colB") 
str = If(reader.IsDBNull(colA), DirectCast(Nothing, String), reader.GetString(colA)) 
int = If(reader.IsDBNull(colB), DirectCast(Nothing, Nullable(Of Integer)), reader.GetInt32(colB)) 
1

唯一の方法は、私は、クライアントコードからDBにNULLのを入力して知っています。

ので、更新/挿入ストアドプロシージャに次のようなものを使用することができます

create proc dbo.UpdateSomeTable 
    @Id int, 
    @Status bit = NULL 
as 
begin 
    update dbo.SomeTable 
    set Status = @Status 
    where Id = @Id 
end 

をし、どこかのコードで

Dim pars As List(Of SqlParameter) = New List(Of SqlParameter) 
With pars 
    .Add(New SqlParameter("@Id", LogbookNoteId)) 
    If Flag Then 
     .Add(New SqlParameter("@Status", Flag)) 
    End If 
End With 
ExecuteNonQuery("dbo.UpdateSomeTable", pars, CommandType.StoredProcedure) 
関連する問題