0

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

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

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

进入 aDataReader以确定该关系是否存在。

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

我尝试了以下方法:

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

我什至尝试将阅读器传递给 adatatable并在没有任何运气的情况下运行它。

如何检查 DataReader 的结果null

4

5 回答 5

5

我更喜欢将 ExecuteScalar 与计算匹配行的查询一起使用:

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

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

如果你真的想使用 reader 方法,你可以使用以下属性来检查它是否有任何行。即使它什么也不返回,该对象也不会为空。

if (dbReader.HasRows) {....}
于 2011-02-10T23:30:09.937 回答
4

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

于 2011-02-10T23:28:04.403 回答
4

Reader 不会返回 null 对象,要了解 reader 是否返回任何可以使用的行if(dbreader.Read())

于 2011-02-10T23:29:58.203 回答
2

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

于 2011-02-10T23:30:37.957 回答
0

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

SELECT SwitchRoom.ModifiedID
FROM SwitchRoom
WHERE SwitchRoomID = @ChkSwitchRmID

返回任何记录?

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

if  (!dbReader.Read())
{
    // execute procedure
}
else
{
    // error
}
于 2011-02-10T23:31:22.230 回答