我有以下方法用于从数据库填充DAO。它执行3次读取 - 一次用于主要对象,另外两次用于某些翻译。
public bool read(string id, MySqlConnection c)
{
MySqlCommand m = new MySqlCommand(readCommand);
m.Parameters.Add(new MySqlParameter("@param1", id));
m.Connection = c;
MySqlDataReader r = m.ExecuteReader();
r.Read();
accountID = Convert.ToInt32(r.GetValue(0).ToString());
...
comment = r.GetValue(8).ToString();
r.Close();
m = new MySqlCommand(getAccountName);
m.Parameters.Add(new MySqlParameter("@param1", accountID));
m.Connection = c;
r = m.ExecuteReader();
r.Read();
account1Name = r.GetValue(0).ToString();
r.Close();
m = new MySqlCommand(getAccountName);
m.Parameters.Add(new MySqlParameter("@param1", secondAccountID));
m.Connection = c;
r = m.ExecuteReader();
r.Read();
account2Name = r.GetValue(0).ToString();
r.Close();
return true;
}
在account2Name = r.GetValue(0).ToString();
行上,我收到以下错误:
Invalid attempt to access a field before calling Read()
我不明白问题是什么 - 上一行调用read!
答案 0 :(得分:3)
这似乎在您的代码中提前工作。你确定有一个值可以读取(即你的查询返回0行或null或其他无法转换为字符串的东西?)
答案 1 :(得分:1)
account1Name = r.GetValue(0).ToString();
行上运行正常。也许你想检查r.Read()
的返回值,看看是否有任何行。该错误可能被解释为“试图访问没有数据的字段”...... ExecuteScalar()
方法而不是ExecuteReader()
。