gpt4 book ai didi

c# - DataReader 为 null 或为空

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:22 25 4
gpt4 key购买 nike

使用 C#

我有一个数据读取器,它从 mysql 数据库返回 lsit 记录。

我正在尝试编写代码来检查数据读取器是否为空。这背后的逻辑是:如果数据读取器有字段,则显示信息,否则隐藏该字段。

我试过:

cmd1 = new OdbcCommand("Select * from tb_car where vehicleno = '" + textbox2.text  + "';", dbcon);
dr1 = cmd1.ExecuteReader();

if (dr1["tb_car"]. != DBNull.Value)
{
textbox1.Text = "contains data";
}
else
{
textbox1.Text = "is null";
}

上面的代码给我这个错误:

异常详细信息:System.IndexOutOfRangeException:附加

任何帮助将不胜感激......

最佳答案

我在这里看到一些问题...首先,看起来您正在尝试访问行中的表名:

if(dr1["tb_car"] != DBNull.Value

您应该传递一个 FIELD NAME 而不是表名。因此,如果名为“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)

如果 DataReader 的 IsDbNull(),您应该使用方法。如

if(dr.IsDbNull("CarId"))

抱歉,我第一次错过了。

关于c# - DataReader 为 null 或为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3432974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com