我在这里看到一些问题...首先,您似乎正在尝试访问以下行中的表名称:
if(dr1["tb_car"] != DBNull.Value
您应该传递字段名称而不是表名称。因此,如果名为“tb_car”的表有一个名为 CarId 的字段,您可能希望代码如下所示:
if(dr1["CarId"] != DBNull.Value)
如果我是对的,那么可能不存在名为“tb_car”的字段,并且“索引超出范围”错误是因为 DataReader 正在查找名为“tb_car”的列集合中的项目但没有找到它。这几乎就是错误的含义。
其次,在检查之前,您必须先调用 DataReader 的 Read() 命令从数据库中读取一行。
所以你的代码实际上应该看起来像......
while(dr.Read())
{
if(dr1["CarId"] != DBNull.Value)
{
....
等等。
请参阅此处了解 DataReader 的正确使用方法:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx
最后,如果您只是检查表中是否有任何行,则可以忽略上述所有内容并使用HasRows财产如
if(dr.HasRows)
{
....
虽然如果你正在使用while(dr.Read())
语法中,while 循环中的代码仅在首先有行的情况下才会执行,因此如果您不想执行任何没有结果的操作,则 HasRows 可能是不必要的。当然,如果您想返回“未找到结果”之类的消息,您仍然想使用它。
编辑 - 添加
我也觉得线路有问题
if(dr1["CarId"] != DBNull.Value)
您应该使用 DataReaderIsDbNull()方法。如
if(dr.IsDbNull("CarId"))
抱歉我第一次错过了。