代码之家  ›  专栏  ›  技术社区  ›  Elie

c mysql参数化查询问题

  •  1
  • Elie  · 技术社区  · 15 年前

    我有以下方法用于从数据库填充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 回复  |  直到 15 年前
        1
  •  3
  •   JerSchneid    15 年前

    这似乎在您的代码中起到了作用。是否确实有要读取的值(即,您的查询是否返回0行或空值或其他无法转换为字符串的内容?)

        2
  •  1
  •   lc.    15 年前
    1. 看来这个程序在网上运行得很好 account1Name = r.GetValue(0).ToString(); . 也许你想检查 r.Read() 先看看有没有行。该错误可以解释为“试图访问没有数据的字段”…
    2. 看起来您正试图从查询中获取单个值。你可能想看看 ExecuteScalar() 方法而不是 ExecuteReader() .