关闭读取器时调用元数据的尝试无效

本文关键字:无效 元数据 调用 读取 | 更新日期: 2023-09-27 18:07:08

try
{
    SqlCommand cmd = con.CreateCommand(); // connection string is correct, work great with other functions.
    cmd.CommandText = "Select * from BOOKS where ac_no='a10001'";
    cmd.CommandType = CommandType.Text;
    con.Open();
    SqlDataReader data = cmd.ExecuteReader();
    int Ac_no = data.GetOrdinal("Ac_no");
    int Issn = data.GetOrdinal("Issn");
    int Isbn = data.GetOrdinal("Isbn");
    int Title = data.GetOrdinal("Title");
    int Author = data.GetOrdinal("Author");
    int Publisher = data.GetOrdinal("Publisher");
    int Edition = data.GetOrdinal("Edition");
    int Year = data.GetOrdinal("Year");
    int Price = data.GetOrdinal("Price");
    int Available = data.GetOrdinal("Available");
    int Rack_no = data.GetOrdinal("Rack_no");
    data.Read();
    /* works fine when label is used to display data */
    /* 
    lbl_Acno.Text = data.GetValue(Ac_no).ToString();
    lbl_Issn.Text = data.GetValue(Issn).ToString();
    lbl_Isbn.Text = data.GetValue(Isbn).ToString();
    lbl_Title.Text = data.GetValue(Title).ToString();
    lbl_Author.Text = data.GetValue(Author).ToString();
    lbl_Pub.Text = data.GetValue(Publisher).ToString();
    lbl_Edition.Text = data.GetValue(Edition).ToString();
    lbl_Book_Year.Text = data.GetValue(Year).ToString();
    */
    /* creates error when textboxes are used to display data */
    txt_acc_acno.Text = data.GetValue(Ac_no).ToString();
    txt_acc_issn.Text = data.GetValue(Issn).ToString();
    txt_acc_isbn.Text = data.GetValue(Isbn).ToString();
    txt_acc_title.Text = data.GetValue(Title).ToString();
    txt_acc_auth.Text = data.GetValue(Author).ToString();
    txt_acc_publisher.Text = data.GetValue(Publisher).ToString();
    txt_acc_edition.Text = data.GetValue(Edition).ToString();
    txt_acc_year.Text = data.GetValue(Year).ToString();
    txt_acc_price.Text = data.GetValue(Price).ToString();
    txt_acc_rack.Text = data.GetValue(Rack_no).ToString();
    con.Close();
}
catch (Exception e1)
{
    MessageBox.Show(e1.Message);
}

我的问题是,当我使用标签来显示数据,然后数据显示,但文本框不显示数据,而是产生一个异常"无效尝试调用元数据时,阅读器关闭。"

连接字符串正确

在文本框中显示从数据库中检索到的数据的正确方法是什么

关闭读取器时调用元数据的尝试无效

这与您使用数据的目的无关,当您尝试从数据读取器读取值时,尽管它已经报告没有更多的数据。

Read方法返回一个布尔值,您可以使用它来确定是否有数据:

if (data.Read()) {
  // there was a record, you can populate the form
} else {
  // no match for the ac_no, result was empty
}

在调用GetOrdinal之前需要调用Read