Tôi đang cố xử lý một số dữ liệu (chủ yếu là giá trị kép) từ cơ sở dữ liệu MySQL. Tôi nhận được thông báo lỗi này:
Nỗ lực truy cập vào một trường không hợp lệ trước khi gọi Read()
Cửa sổ quan sát:
readerCompare1["Fe1"] 'readerCompare1["Fe1"]' đã đưa ra một ngoại lệ thuộc loại đối tượng 'MySql.Data.MySqlClient.MySqlException' {MySql.Data.MySqlClient.MySqlException}
Tôi đã sử dụng mã chính xác này trước đây và nó hoạt động tốt.
Mã số:
cho (int k = 1; k <= pocet; k++)
{
chuỗi queryCompare = " CHỌN F1 NHƯ Fe1, F2 NHƯ Fe2, F3 NHƯ Fe3, F4 NHƯ Fe4, F5 NHƯ Fe5, F6 NHƯ Fe6, F7 NHƯ Fe7, F8 NHƯ Fe8, cụm TỪ các tính năng WHERE ID=" + k;
MySqlCommand cmdCompare = new MySqlCommand(queryCompare, conect);
readerCompare1 = cmdCompare.ExecuteReader();
readerCompare1.Read();
// MessageBox.Show("OK");
double f1 = Convert.ToDouble(readerCompare1["Fe1"].ToConvertibleDouble()); //Ngoại lệ được ném vào đây
double f2 = Convert.ToDouble(readerCompare1["Fe2"].ToConvertibleDouble());
double f3 = Convert.ToDouble(readerCompare1["Fe3"].ToConvertibleDouble());
double f4 = Convert.ToDouble(readerCompare1["Fe4"].ToConvertibleDouble());
double f5 = Convert.ToDouble(readerCompare1["Fe5"].ToConvertibleDouble());
double f6 = Convert.ToDouble(readerCompare1["Fe6"].ToConvertibleDouble());
double f7 = Convert.ToDouble(readerCompare1["Fe7"].ToConvertibleDouble());
double f8 = Convert.ToDouble(readerCompare1["Fe8"].ToConvertibleDouble());
// string f88 = readerCompare["Fe8"].ToString();
// double f8 = Convert.ToDouble(f88, CultureInfo.InvariantCulture);
int cluster = Convert.ToInt32(readerCompare1["cluster"].ToString());
readerCompare1.Close();
Một ngoại lệ được đưa ra trên dòng: double f1 = Convert.ToDouble(readerCompare1["Fe1"] ...
Nhưng như bạn có thể thấy, tôi đã gọi Read() trước:
readerCompare1.Read();
Bất cứ ai có thể giải thích tại sao điều này xảy ra? Cảm ơn
Đọc
Phương thức này trả về một giá trị bool cho bạn biết liệu có thông tin nào không. Nếu trả về sai, bạn sẽ không thể đọc nội dung từ trình đọc.
Bạn nên gói mã của mình trong câu lệnh if (hoặc câu lệnh while, tùy thuộc vào số lượng kết quả bạn mong đợi):
if(readerCompare1.Read()) {
double f1 = Convert.ToDouble(readerCompare1["Fe1"].ToConvertibleDouble());
double f2 = Convert.ToDouble(readerCompare1["Fe2"].ToConvertibleDouble());
double f3 = Convert.ToDouble(readerCompare1["Fe3"].ToConvertibleDouble());
double f4 = Convert.ToDouble(readerCompare1["Fe4"].ToConvertibleDouble());
double f5 = Convert.ToDouble(readerCompare1["Fe5"].ToConvertibleDouble());
double f6 = Convert.ToDouble(readerCompare1["Fe6"].ToConvertibleDouble());
double f7 = Convert.ToDouble(readerCompare1["Fe7"].ToConvertibleDouble());
double f8 = Convert.ToDouble(readerCompare1["Fe8"].ToConvertibleDouble());
}
Ví dụ về MySqlDataReader
Tôi là một lập trình viên xuất sắc, rất giỏi!