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

在没有任何数据时进行无效的读取尝试

出现的问题:
在没有任何数据时进行无效的读取尝试。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 在没有任何数据时进行无效的读取尝试。

源错误: 


行 30:  SqlDataReader sdr=cmd.ExecuteReader ();
行 31:  sdr.Read ();
行 32:  this.Label1.Text =sdr["审核"].ToString ();
行 33:  }
行 34:  }
 

源文件: c:\inetpub\wwwroot\guanli\book1.ascx.cs    行: 32 

堆栈跟踪: 


[InvalidOperationException: 在没有任何数据时进行无效的读取尝试。]
   System.Data.SqlClient.SqlDataReader.PrepareRecord(Int32 i)
   System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
   System.Data.SqlClient.SqlDataReader.get_Item(String name)
   guanli.book1.Page_Load(Object sender, EventArgs e) in c:\inetpub\wwwroot\guanli\book1.ascx.cs:32
   System.Web.UI.Control.OnLoad(EventArgs e)
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Control.LoadRecursive()
   System.Web.UI.Page.ProcessRequestMain()

 

代码如下:
namespace guanli
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data .SqlClient ;

/// <summary>
/// book1 的摘要说明。
/// </summary>
public class book1 : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!this.IsPostBack )
{
databind();
SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
SqlCommand cmd=new SqlCommand("select * from Book_info where UserID='"+Session["UserID"].ToString ()+"'",con);
con.Open ();
SqlDataReader sdr=cmd.ExecuteReader ();
sdr.Read ();
this.Label1.Text =sdr["审核"].ToString ();
}
}
public void databind()
{   
string uid=Session["UserID"].ToString ();
string strSql="select * from Book_info where UserID='"+uid+"'";
ExcuteSql(strSql,DataGrid1);
}
private void ExcuteSql(string strSql,DataGrid dg)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
SqlCommand cmd=new SqlCommand(strSql,con);
con.Open ();
SqlDataReader sdr=cmd.ExecuteReader ();
dg.DataSource =sdr;
dg.DataBind ();

sdr.Close ();
con.Close ();

}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.DataGrid1.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_CancelCommand);
this.DataGrid1.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_EditCommand);
this.DataGrid1.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_UpdateCommand);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string Tid=e.Item .Cells [0].Text ;
string isbn=((TextBox)(e.Item.Cells[1].Controls[0])).Text;
string bookname=((TextBox)(e.Item.Cells[2].Controls[0])).Text;
int banben=Convert.ToInt32 (((TextBox)(e.Item.Cells[3].Controls[0])).Text);
int shuliang=Convert.ToInt32 (((TextBox)(e.Item.Cells[6].Controls[0])).Text);
string zuozhe=((TextBox)(e.Item.Cells[4].Controls[0])).Text;
string chuban=((TextBox)(e.Item.Cells[5].Controls[0])).Text;
string strSql="update Book_info set isbn='"+isbn+"',bookname='"+bookname+"',edition="+banben+",author='"+zuozhe+"',press='"+chuban+"',num="+shuliang+" where userid='"+Tid+"'";
  
string strconn = System.Configuration.ConfigurationSettings.AppSettings["DSN"];//从Web.config中读取
SqlConnection conn =new SqlConnection(strconn);
SqlCommand com = new SqlCommand(strSql,conn);
conn.Open();
com.ExecuteNonQuery();
conn.Close();
DataGrid1.EditItemIndex =-1;
databind();

}

private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
// DataGrid1.EditItemIndex =e.Item .ItemIndex ;
// databind();
Response.Write ("<script language='javascript'>window.open('bookxg.aspx?id="+Session["UserID"].ToString ()+"','','width=400,height=400')</script>");
Response.Write ("<script>location='javascript:history.go(-1)</script>'");
databind();
}

private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataGrid1.EditItemIndex =-1;
databind();
}

private void Button1_Click(object sender, System.EventArgs e)
{
string uid=Session["UserID"].ToString ();
SqlConnection con = new SqlConnection();
con.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
string strSql="update userinfo set booktag=1 where userid='"+uid+"' ";
SqlCommand com = new SqlCommand(strSql,con);
con.Open();
com.ExecuteNonQuery();
con.Close();
}
}
}
--------------------编程问答-------------------- SqlDataReader sdr=cmd.ExecuteReader ();
sdr.Read ();
this.Label1.Text =sdr["审核"].ToString ();
==
SqlDataReader sdr=cmd.ExecuteReader ();
if(sdr.Read ())
{
this.Label1.Text =sdr["审核"].ToString ();
}
--------------------编程问答-------------------- 楼主居然还用VS2003,PFPF --------------------编程问答--------------------

while(sdr.Read ())
{
this.Label1.Text =sdr["审核"].ToString ();
}
--------------------编程问答--------------------

while(sdr.Read ())
{
   //xxxxxxxx
}
--------------------编程问答-------------------- 加个判断就行了

  if(sdr.read()) //如果找到相应的数据,就...
  {
    //*****
  }

--------------------编程问答-------------------- while(sdr.Read ())
{
   //你的代码就可以
}

--------------------编程问答-------------------- sdr.Read ();
需要判断是否读到数据 --------------------编程问答--------------------
引用 2 楼 amandag 的回复:
楼主居然还用VS2003,PFPF

怎么看出来的呢? --------------------编程问答-------------------- 我也遇到这问题了,sql语句执行后,有数据,可是提示这个
我用的vs08 的


高手赐教 --------------------编程问答-------------------- 断点调试下
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,