繁体   English   中英

对象引用未设置为对象asp.net的实例

[英]object reference not set to an instance of an object asp.net

在下面的代码中,当我按下button2时,它说:

你调用的对象是空的

这是怎么回事?

public partial class rec : System.Web.UI.Page
{
   protected void Button1_Click(object sender, EventArgs e)
   {
      try
      {
          SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|DB.mdf;Integrated Security=True;User Instance=True");

          SqlCommand cmd;
          con.Open();

          cmd = new SqlCommand("SELECT  SrviceType, Msg FROM OrderNum ", con);

          SqlDataReader dr;
          dr = cmd.ExecuteReader();

          dr.Read();

          Label1.Text = dr[0].ToString();
          TextBox1.Text = dr[1].ToString();
      }
      catch (Exception ex)
      {
          System.Windows.Forms.MessageBox.Show(ex.Message);
      }
  }

  protected  void Button2_Click(object sender, EventArgs e)
  {
      SqlDataReader dr = null;

      try
      {
          dr.Read();
          Label1.Text = dr[0].ToString();
          TextBox1.Text = dr[1].ToString();
      }
      catch (Exception ex)
      {
          System.Windows.Forms.MessageBox.Show(ex.Message);
      }
  }
}
SqlDataReader dr = null;

然后您尝试从中读取空对象

dr.Read();

确保这是网页,你不能保持状态,如果你想获得Button_click1数据rearder

您需要将阅读器dr分配给命令。

在这里看看示例: http : //msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldatareader.aspx

SqlDataReader对象用于保存从数据库中执行/获取的数据的一次性结果,可用于遍历每一行以获取所需的列。 因此,在尝试从SqlDataReader对象读取之前,它应该具有一些数据。

可以通过以下语句来完成:

SqlDataReader sqldatareaderobject = sqlcommandobject.ExecuteReader();

您在Button1_click函数中遵循了上述原理,但是在Button2_click函数中缺少了相同原理。

在您的案例“ dr”中,SqlDataReader对象包含空值,因为您错过了调用ExecuteReader()函数的权限,而在空对象(dr)之上调用Read()函数时,它抛出了异常。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM