2016-07-22 2 views
0

私はプロジェクト内のイメージを使用しています。データベースからVB.Netアプリケーションにイメージを取得する必要があります。問題はデータベース内のNULLを取得するときです。バイトはnullではないというエラーを返します。ここでは、「Bytesはnullではない」という統計がありますが、私のストアドプロシージャからアプリケーションにデータを直接キャストした記事があります。VB.netでヌルイメージをチェックする方法

Sub searchEmpPic(ByVal employeenumber As String) 

     Dim sqlcomm As New SqlCommand 
     Dim dt As New DataTable 
     Dim dta As New SqlDataAdapter 

     With sqlcomm 

      conn.Open() 
      .Connection = conn 
      .CommandText = "dbo.getEmpPic" 
      .CommandType = CommandType.StoredProcedure 
      .Parameters.AddWithValue("@eNum", employeenumber) 
      'error happens during DirectCast 
      If DirectCast(.ExecuteScalar, Byte()) Is Nothing Then 
       loadDefaultPic() 
       conn.Close() 
      Else 
       Dim imagedata As Byte() = DirectCast(.ExecuteScalar, Byte()) 
       Dim ms As New MemoryStream 
       ms.Write(imagedata, 0, imagedata.Length) 
       Me.pbEpic.BackgroundImage = Image.FromStream(ms, True) 
       pbEpic.BackgroundImageLayout = ImageLayout.Zoom 
       conn.Close() 
      End If 



      .Dispose() 
     End With 




    End Sub 

どうすればこの問題を解決できますか?

これは、ストアドプロシージャ

ALTER procedure [dbo].[getEmpPic] 

@eNum as varchar(10) 

as 

begin 

    select isnull(employee_picture,0) from employee where employee_id = @eNum 

end 

答えて

1

NULL値に関係なく、データベースにして作業しているデータ型のまったく同じように扱われています。データベースにクエリを実行すると、予想される型の値が取得されるか、データベースフィールドがNULLの場合はDBNull.Valueが取得されます。あなたはそれはあなたがやっている正確に何に依存しますが、ExecuteScalarの場合には、あなたがこれを行うことができます検出方法:

'result will be type Object as that is what ExecuteScalar returns.' 
Dim result = myCommand.ExecuteScalar() 

If result Is DBNull.Value Then 
    'The database produced NULL so there is no value.' 
    '...' 
Else 
    Dim value = DirectCast(result, Byte()) 

    'Use value here.' 
End If 

もう一つの変化は次のようになります。

Dim value = TryCast(myCommand.ExecuteScalar(), Byte()) 

If value Is Nothing Then 
    'The database did not produce a Byte() so the field was NULL.' 
    '...' 
Else 
    'Use value here.' 
End If 

後者の場合には、valueがされますタイプByte()であると推定されますが、ExecuteScalarがそのタイプのオブジェクトを返さない場合は、Nothingになります。

+0

私はあなたの最初のバリエーションを使用しました。私は問題が発生しました。そのパラメータは、 'Me.pbEpic.BackgroundImage = Image.FromStream(ms、True)'の行には有効ではありません。 '私はストアドプロシージャのisnull関数を削除しました。今はうまくいく! – UserSeriously

+0

私はそれを修正しました、反復申し訳ありません! – UserSeriously

関連する問題