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);
}
我的问题是,当我使用标签显示数据时,显示数据,但文本框不显示数据,而是生成异常“读取器关闭时无效尝试调用MetaData。”
连接字符串是正确的。
显示从数据库中检索的数据(在文本框中)的正确方法是什么。
答案 0 :(得分:0)
这与您使用数据的内容无关,当您尝试从数据读取器读取值时会发生这种情况,尽管它已经报告过没有更多数据。
Read
方法返回一个布尔值,您可以使用它来确定是否有任何数据:
if (data.Read()) {
// there was a record, you can populate the form
} else {
// no match for the ac_no, result was empty
}
答案 1 :(得分:0)
在调用GetOrdinal之前,您需要调用Read。