如何检查datareader是否为null?

时间:2011-02-10 23:25:07

标签: c# asp.net sqldatareader datareader dbnull

我有一个aspx页面,允许用户将修改后的条目提交到数据库中,但是当用户单击Submit来触发存储过程时,我想首先运行检查以查看修改后的行是否与存在相同的关系。

我正在传递以下查询的结果:

SELECT SwitchRoom.ModifiedID FROM SwitchRoom WHERE 
    SwitchRoomID = @ChkSwitchRmID", constring; 

DataReader以确定该关系是否存在。

我需要它来确定读者是否返回NULL以允许执行该过程,如果没有,则不允许用户保存信息。

我尝试了以下内容:

if (dbreader = NULL)
{
 Fire Procedure
}
else
{
 "Error Message"
}

我甚至尝试将读者传递给datatable,并在没有任何运气的情况下运行它。

如何查看DataReader的结果null

5 个答案:

答案 0 :(得分:5)

我更喜欢使用ExecuteScalar和一个计算匹配行的查询:

"SELECT count(*) FROM SwitchRoom WHERE SwitchRoomID = @ChkSwitchRmID"

然后将Execute标量的结果与零进行比较。不需要空检查。

如果您确实想使用reader方法,可以使用以下属性来检查它是否有任何行。即使它没有返回任何内容,该对象也不会为null。

if (dbReader.HasRows) {....}

答案 1 :(得分:4)

尝试if (!dbReader.Read() || dbreader.IsDbNull(field)} { .. }

答案 2 :(得分:4)

Reader不会返回null对象,要确定读者是否返回任何行,您可以使用if(dbreader.Read())

答案 3 :(得分:2)

您正在寻找DBNull类型。数据库不发送实际的空引用,它们在C#中发送一个特殊的数据类型来表示数据库的NULL值。

答案 4 :(得分:0)

所以基本上,你想知道是否

SELECT SwitchRoom.ModifiedID
FROM SwitchRoom
WHERE SwitchRoomID = @ChkSwitchRmID

返回任何记录?

读者永远不会是空的。您需要检查阅读器是否包含没有要阅读的记录。

if  (!dbReader.Read())
{
    // execute procedure
}
else
{
    // error
}