在下面的代码中,当我按下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);
}
}
}
答案 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()函数时抛出异常。
谢谢