2011-02-10 90 views
0

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

我传递以下查询的结果:

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

DataReader以确定是否存在关系。

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

我已经试过如下:

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

,我甚至已经试过路过读者进入一个datatable并运行它针对的是没有任何的运气。

如何检查DataReader的结果是否为null

回答

4

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

+0

太棒了!刚试过这个,它实现了一个梦想。感谢您的意见。 – 2011-02-11 14:16:26

4

读者将不会返回一个空的对象,要了解读者返回任何行,你可以使用if(dbreader.Read())

5

我更喜欢使用的ExecuteScalar与计数匹配行的查询:

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

然后比较执行标量的结果为零。不需要空检查。

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

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

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

0

所以基本上,你要知道,如果

SELECT SwitchRoom.ModifiedID 
FROM SwitchRoom 
WHERE SwitchRoomID = @ChkSwitchRmID 

返回任何记录?

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

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