从数据库显示数据时出错

时间:2014-08-04 03:32:11

标签: c# sql-server wpf database textbox

我想将数据库中的数据显示到我的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();
}

1 个答案:

答案 0 :(得分:1)

来自MSDN的文档:

  

SqlDataReader的默认位置在第一条记录之前。因此,您必须调用Read以开始访问任何数据。

因此,在尝试获取值之前,您必须至少执行一次读取。

您不一定需要循环:

rdr.Read();
rtb.Text = rdr.GetString(1);

虽然如果您只需要一行中的一列,您可能需要阅读ExecuteScalar