我想将数据库中的数据显示到我的WPF应用程序的文本框中。使用下面的代码,它工作正常。
private void Button_Click(object sender, RoutedEventArgs e)
{
sqlCon = new SqlConnection(conStr);
string sqlCmd = "select * from RTF ";
sqlCon.Open();
SqlCommand sc = new SqlCommand(sqlCmd, sqlCon);
SqlDataReader rdr = sc.ExecuteReader();
//sc.Dispose();
while (rdr.Read())
{
string filename = rdr.GetString(1);
rtb.Text = filename ;
}
rdr.Close();
sqlCon.Close();
}
但是,如果我采用下面的While(rdr.Read())
,我会得到一个例外
System.Data.dll中发生未处理的异常关闭类型'System.InvalidOperationException'
其他信息:没有数据时读取的尝试无效。
有人可以解释为什么会发生此错误吗?我认为通过指定:
从数据库中检索字符串就足够了string filename = rdr.GetString(1)
所以不需要做循环,但显然不是这里的情况。有什么想法吗?
private void Button_Click(object sender, RoutedEventArgs e)
{
sqlCon = new SqlConnection(conStr);
string sqlCmd = "select * from RTF ";
sqlCon.Open();
SqlCommand sc = new SqlCommand(sqlCmd, sqlCon);
SqlDataReader rdr = sc.ExecuteReader();
//sc.Dispose();
string filename = rdr.GetString(1);
rtb.Text = filename ;
rdr.Close();
sqlCon.Close();
}
答案 0 :(得分:1)
来自MSDN的文档:
SqlDataReader的默认位置在第一条记录之前。因此,您必须调用Read以开始访问任何数据。
因此,在尝试获取值之前,您必须至少执行一次读取。
您不一定需要循环:
rdr.Read();
rtb.Text = rdr.GetString(1);
虽然如果您只需要一行中的一列,您可能需要阅读ExecuteScalar
。