2

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

3 回答 3

3
SqlDataReader dr = null;

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

dr.Read();

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

于 2013-10-20T01:59:31.570 回答
1

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

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

于 2013-10-20T01:59:48.940 回答
1

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

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

SqlDataReader sqldatareaderobject=sqlcommandobject.ExecuteReader();

您在 Button1_click 函数中遵循上述原则,但在 Button2_click 函数中缺少相同的原则。

在您的情况下,SqlDataReader 对象“dr”包含 null,因为您错过了调用 ExecuteReader() 函数,并且当您在 null object(dr) 之上调用 Read() 函数时,它会引发异常。

谢谢

于 2013-10-20T12:40:23.927 回答