关闭读取器时调用元数据的尝试无效
本文关键字:无效 元数据 调用 读取 | 更新日期: 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