求解一个错误!
代码如下:protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Server=(Local);Integrated security=SSPI;database=ILS");
con.Open();
SqlCommand mycon = new SqlCommand("select distinct carrier from carrier where carrier='"+TextBox1.Text.ToString()+"'", con);
SqlDataReader reader = mycon.ExecuteReader();
string i = reader.GetString(0);
if (i == "UPS")
{
Label2.Visible = true;
Label2.Text = "成功";
}
else
{
Label2.Visible = true;
Label2.Text = "失败";
}
reader.Close();
}
运行出错:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
在没有任何数据时进行无效的读取尝试。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 在没有任何数据时进行无效的读取尝试。
源错误:
行 32:
行 33: SqlDataReader reader = mycon.ExecuteReader();
行 34: string i = reader.GetString(0);
行 35:
行 36: if (i == "UPS")
源文件: D:\Backup\我的文档\Visual Studio 2008\Projects\KC01\KC01\2.aspx.cs 行: 34
堆栈跟踪:
--------------------编程问答-------------------- SQL语句我查了,是对的,没有问题,不知道问题出在哪个地方了,郁闷半天了
--------------------编程问答-------------------- string i = "";
SqlDataReader reader = mycon.ExecuteReader();
if(reader.Read())
{
i = reader.GetString(0);
} --------------------编程问答-------------------- 楼上正解!mycon.ExecuteReader();返回果没有记录数据,则直接输出会报错。
使用reader.Read()读记录后赋值。。。 --------------------编程问答-------------------- 多谢,已经解决了。多谢楼上的各位了 --------------------编程问答-------------------- --------------------编程问答-------------------- SqlDataReader reader = mycon.ExecuteReader();
string i = reader.GetString(0);
sqldatareader相当于向前的指针,必须调用dr.read()来控制其往前推移. --------------------编程问答--------------------
怎么解决的啊? --------------------编程问答--------------------
使用了reader.Read(),还是报异常,是不是读取的记录只有一行的原因啊? --------------------编程问答-------------------- if(reader.hasRows)
{
reader.Read();
i = reader.GetString(0);
} --------------------编程问答-------------------- 调用read里面的数据一定要调用read.read()方法才行..
单条数据用if(read.read()),多条数据用while(read.read()) --------------------编程问答--------------------
是的,如果从数据库取多条记录不会有问题,如果只取一条记录就会有问题,以下是代码
OleDbDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
string text1 = reader[2].ToString();
}
是修改后的,之前用while(reader.Read())
但是都报同样的异常,IF 和WHILE没有区别。
reader[2]引发system.invalidOperationException --------------------编程问答-------------------- 感觉没问题 --------------------编程问答--------------------
走两步 --------------------编程问答-------------------- reader只能循环着读取完。用循环读reader --------------------编程问答--------------------
刚才使用这种方式,单步调试的时候,在监视框里输入reader[2],显示同样的异常,后来上了厕所回来什么都没有动,再次输入reader[2],就显示有数据了,后来重新调试,就再也没有出现数据!!!??? --------------------编程问答--------------------
今天好奇怪,吃过午饭,代码还是那个代码,机器还是那台机器,重新运行了一下,居然可以了,谢谢!
补充:.NET技术 , C#