当前位置:编程学习 > C#/ASP.NET >>

求解一个错误!

代码如下:

 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()来控制其往前推移. --------------------编程问答--------------------
引用 4 楼 uatcc 的回复:
多谢,已经解决了。多谢楼上的各位了


怎么解决的啊? --------------------编程问答--------------------
引用 2 楼 peter200694013 的回复:
string i = "";
SqlDataReader reader = mycon.ExecuteReader();
if(reader.Read())
{
i = reader.GetString(0);
}


使用了reader.Read(),还是报异常,是不是读取的记录只有一行的原因啊? --------------------编程问答-------------------- if(reader.hasRows)
{
reader.Read();
i = reader.GetString(0);
} --------------------编程问答-------------------- 调用read里面的数据一定要调用read.read()方法才行..
单条数据用if(read.read()),多条数据用while(read.read()) --------------------编程问答--------------------
引用 10 楼 juenice 的回复:
调用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 --------------------编程问答-------------------- 感觉没问题 --------------------编程问答--------------------
引用 12 楼 hzq19900516 的回复:
感觉没问题


走两步 --------------------编程问答-------------------- reader只能循环着读取完。用循环读reader --------------------编程问答--------------------
引用 9 楼 benyouyong 的回复:
if(reader.hasRows)
{
reader.Read();
string text1 = reader[2].ToString();
}


刚才使用这种方式,单步调试的时候,在监视框里输入reader[2],显示同样的异常,后来上了厕所回来什么都没有动,再次输入reader[2],就显示有数据了,后来重新调试,就再也没有出现数据!!!??? --------------------编程问答--------------------
引用 9 楼 benyouyong 的回复:
if(reader.hasRows)
{
reader.Read();
i = reader.GetString(0);
}


今天好奇怪,吃过午饭,代码还是那个代码,机器还是那台机器,重新运行了一下,居然可以了,谢谢!
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,