尝试运行基本存储过程时数据为空

时间:2013-08-22 19:27:15

标签: vb.net stored-procedures

我创建了这个简单的测试,用于从存储过程中读取数据。我必须忽略一些显而易见的事情,因为我无法弄清楚为什么我继续没有数据。

myReader.HasRows永远是真的。

我注意到它返回了正确的行数,但是我无法获取可能在行中的任何数据。

存储过程

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

2 个答案:

答案 0 :(得分:1)

首先,尝试使用提供的车辆ID在管理工作室中运行查询,以查看它返回的结果。其次,我会尝试更改if语句,如下所示,看看你是否还有问题:

If Not myReader.IsDBNull(0) Then 

此外,在使用IsDBNull之前,必须检查允许NULL值的所有后续字段。这也可能会导致一些问题。

答案 1 :(得分:1)

来自MSDN关于SqlDataReader.GetString方法方法:

  

不进行转换;因此,检索的数据必须   已经是一个字符串。

     

调用IsDBNull以检查之前的空值   调用这种方法。

我的猜测是IsDBNull.myReader.GetString(0)返回False,因为CarId不是String列(uniqueidentifier}。

相反,要测试的是值为null,请尝试使用适用于任何数据类型的SqlDataReader.IsDBNull方法。

If Not myReader.IsDBNull(0) Then