我有一个aspx页面,允许用户将修改后的条目提交到数据库中,但是当用户单击Submit
来触发存储过程时,我想首先运行检查以查看修改后的行是否与存在相同的关系。
我正在传递以下查询的结果:
SELECT SwitchRoom.ModifiedID FROM SwitchRoom WHERE
SwitchRoomID = @ChkSwitchRmID", constring;
到DataReader
以确定该关系是否存在。
我需要它来确定读者是否返回NULL
以允许执行该过程,如果没有,则不允许用户保存信息。
我尝试了以下内容:
if (dbreader = NULL)
{
Fire Procedure
}
else
{
"Error Message"
}
我甚至尝试将读者传递给datatable
,并在没有任何运气的情况下运行它。
如何查看DataReader的结果null
?
答案 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
}