dataReader值为null

try
{
string strcon = "Data Source=(local)\\SQLEXPRESS;Initial Catalog=xuesheng;Integrated Security=True"; //连接数据库
SqlConnection cn = new SqlConnection(strcon);
cn.Open();
string sqlStr = "select * from Admin where sno = '" +textBox1.Text + "' and pwd = '" +textBox2.Text + "'";
SqlDataAdapter SqlDap = new SqlDataAdapter(sqlStr, cn);
DataTable dt = new DataTable();
SqlDap.Fill(dt);
i = dt.Rows.Count;
}
catch (SqlException ee) //捕获异常
{
MessageBox.Show(ee.Message);
}
if (i >= 1)
{
if (radioButton2.Checked)
{
if (dataReader.GetString(2) == "学生")
{
MessageBox.Show("你没有教师权限!");
}
执行到dataReader.GetString(2) == "学生"这一步时系统报错,显示dataReader值为null,应该怎么解决?

这个问题有可能因为,在数据库记录中纯在字段为空值。读取赋值的时候出现错误。
还有就是在更新和存储的过程中因为有空值出现封装的SQL Task 出现错误。

根据你贴出来的图片的首句:Message="未……";我可以初步判断是你在发送或者读取的时候这个值为空。当然了楼上说的数据库中没有数据是错误的,是可能存在空记录。如果是没有记录那么while (DataReader.Read())是不运行的。

一般我解决这个问题的方法是:string类型:在当TextBox有可能出现空值是。赋值语句这样写
Message=string.IsEmpty(TextBox.Text.ToString())?string.Empty:TextBox.Text.ToString();
这样便可以避免这个问题。当然了这个仅适合string类型。数据类型有需要的再提供。
同样道理。当数据库中出在空字段也是同理。
Message=string.IsEmpty(DataReader["filed"].ToString())?string.Empty:DataReader["filed"].ToString();

为了避免重复操作。我一般是先封装成一个属性类。然后直接调用即可。
来至:.net 初学者群,群号:60486014的解答。同时欢迎广大爱好者加盟共同探讨。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-27
你贴出来的代码中就没有给dataReader赋值好不好,自然是null咯。追问

那应该怎么给他赋值呢

追答

使用dataReader的话,需要用SqlConnection创建SqlCommand,然后通过SqlCommand的ExecuteReader方法执行SQL语句,返回dataReader。这个过程和你原代码中使用的SqlDataAdapter和DataTable是不一样的。可以查找一下SqlDataReader相关的资料。

相似回答
大家正在搜