使用C#
我有一个datareader从mysql数据库返回一个lsit记录.
我正在尝试编写代码来检查datareader是否仍然无效.这背后的逻辑是:如果具有字段的datareader然后显示信息,否则隐藏该字段.
我试过了:
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";
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我这个错误:
异常详细信息:System.IndexOutOfRangeException:Additional
任何帮助将不胜感激...
我在这里看到一些问题......首先,看起来你正试图访问该行中的表名:
if(dr1["tb_car"] != DBNull.Value
Run Code Online (Sandbox Code Playgroud)
您应该传递FIELD NAME而不是表名.因此,如果名为"tb_car"的表有一个名为CarId的字段,您可能希望代码看起来像:
if(dr1["CarId"] != DBNull.Value)
Run Code Online (Sandbox Code Playgroud)
如果我是对的,那么可能没有名为"tb_car"的字段,并且索引超出范围错误是因为DataReader正在查找名为"tb_car"的列集合中的项目而未找到它.这几乎就是错误的含义.
其次,在你甚至可以检查它之前,你必须首先调用DataReader的Read()命令来从数据库中读取一行.
所以你的代码真的应该像......
while(dr.Read())
{
if(dr1["CarId"] != DBNull.Value)
{
....
Run Code Online (Sandbox Code Playgroud)
等等.
请参阅此处以正确使用DataReader:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.read.aspx
最后,如果您只是检查表中是否有任何行,则可以忽略上述所有行并使用HasRows属性,如
if(dr.HasRows)
{
....
Run Code Online (Sandbox Code Playgroud)
虽然如果你正在使用while(dr.Read())语法,while循环中的代码只会在第一个地方有行时执行,所以如果你不想做任何没有结果的事情,那么HasRows可能是不必要的.如果你想返回"没有找到结果"这样的消息,你仍然想要使用它,当然..
编辑 - 添加
我认为线路也存在问题
if(dr1["CarId"] != DBNull.Value)
Run Code Online (Sandbox Code Playgroud)
你应该使用DataReader的IsDbNull()方法.如在
if(dr.IsDbNull("CarId"))
Run Code Online (Sandbox Code Playgroud)
对不起,我第一次错过了.
| 归档时间: |
|
| 查看次数: |
9791 次 |
| 最近记录: |