1

ストアド プロシージャからデータを読み取るためのこの簡単なテストを作成しました。なぜデータが得られないのか理解できないので、明らかな何かを見落としているに違いありません。

myReader.HasRows は常に true です。

正しい行数が返されていることに気付きましたが、行にある可能性のあるデータを取得するのに問題があります。

ストアド プロシージャ

ALTER PROCEDURE [dbo].[testProc] 
    -- Add the parameters for the stored procedure here
    @carID uniqueidentifier
AS
BEGIN

SELECT * FROM carTable WHERE carID=@carID

END

VB.Net

Dim cmd As New SqlClient.SqlCommand("testProc", _conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("carID", carID)

_conn.Open()

Dim myReader As SqlDataReader

myReader = cmd.ExecuteReader()

If myReader.HasRows = True Then
    While (myReader.Read())
        If Not IsDBNull(myReader.GetString(0)) Then
            ' do stuff here
        End If
    End While
End If
4

2 に答える 2

1

SqlDataReader.GetStringメソッドメソッドについてのMSDNから:

変換は実行されません。したがって、取得されたデータはすでに文字列である必要があります。

このメソッドを呼び出す前に、IsDBNull を呼び出して null 値を確認してください。

私の推測では、 は列ではないため(それは )IsDBNull.myReader.GetString(0)返されます。FalseCarIdStringuniqueidentifier

代わりに、値が null かどうかをテストするには、SqlDataReader.IsDBNull任意のデータ型に適用されるメソッドを使用してみてください。

If Not myReader.IsDBNull(0) Then 
于 2013-08-22T20:37:25.897 に答える