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

时间:2013-10-20 01:51:40

标签: c# asp.net nullreferenceexception

在下面的代码中,当我按下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);
      }
  }
}

3 个答案:

答案 0 :(得分:3)

SqlDataReader dr = null;

然后尝试从

中读取空对象
dr.Read();

如果您想获取Button_click1数据后方,请确保这是您无法保持状态的网页

答案 1 :(得分:1)

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

看一下这里的例子: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx

答案 2 :(得分:1)

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

可以通过以下声明完成:

SqlDataReader sqldatareaderobject = sqlcommandobject.ExecuteReader();

你在Button1_click函数中遵循以上原则但你在Button2_click函数中缺少相同的原则。

你的案例“dr”中的SqlDataReader对象包含null,因为你错过了调用ExecuteReader()函数,并且当你在null对象(dr)之上调用Read()函数时抛出异常。

谢谢