gpt4 book ai didi

c# - 在调用 Read() 之前尝试访问字段无效,但我先调用了 Read()

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:08 27 4
gpt4 key购买 nike

我正在尝试处理来自 MySQL 数据库的一些数据(主要是 double 值)。我收到此错误消息:

Invalid attempt to access a field before calling Read()

观察窗口:

readerCompare1["Fe1"]   'readerCompare1["Fe1"]' threw an exception of type 'MySql.Data.MySqlClient.MySqlException'  object {MySql.Data.MySqlClient.MySqlException}

我以前使用过这个确切的代码并且它工作得很好。

代码:

  for (int k = 1; k <= pocet; k++)
{
string queryCompare = " SELECT F1 AS Fe1, F2 AS Fe2, F3 AS Fe3, F4 AS Fe4, F5 AS Fe5, F6 AS Fe6, F7 AS Fe7, F8 AS Fe8, cluster FROM features WHERE ID=" + k;
MySqlCommand cmdCompare = new MySqlCommand(queryCompare, conect);
readerCompare1 = cmdCompare.ExecuteReader();
readerCompare1.Read();
// MessageBox.Show("OK");
double f1 = Convert.ToDouble(readerCompare1["Fe1"].ToConvertibleDouble()); //Exception THROWN HERE
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();

行上抛出异常:double f1 = Convert.ToDouble(readerCompare1["Fe1"] ...

但如您所见,我首先调用了 Read():

readerCompare1.Read();

谁能解释一下,为什么会这样?谢谢

最佳答案

Read 方法返回一个 bool 值,告诉您是否有任何信息可用。如果返回 false,您将无法尝试从阅读器读取内容。

您应该将代码包装在 if 语句(或 while 语句,具体取决于您期望的结果数量)中:

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());
}

MySqlDataReader examples

关于c# - 在调用 Read() 之前尝试访问字段无效,但我先调用了 Read(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com