C#MySQL参数化查询问题

时间:2009-05-07 04:42:11

标签: c# mysql

我有以下方法用于从数据库填充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!

2 个答案:

答案 0 :(得分:3)

这似乎在您的代码中提前工作。你确定有一个值可以读取(即你的查询返回0行或null或其他无法转换为字符串的东西?)

答案 1 :(得分:1)

  1. 看起来该程序在account1Name = r.GetValue(0).ToString();行上运行正常。也许你想检查r.Read()的返回值,看看是否有任何行。该错误可能被解释为“试图访问没有数据的字段”......
  2. 看起来您正在尝试从查询中获取单个值。您可能希望查看ExecuteScalar()方法而不是ExecuteReader()