【问题标题】:C# MySQL Parameterized Query ProblemC# MySQL 参数化查询问题
【发布时间】:2009-05-07 04:42:11
【问题描述】:

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

【问题讨论】:

    标签: c# mysql


    【解决方案1】:

    这似乎在您的代码中较早地起作用。您确定那里有要读取的值(即您的查询是否返回 0 行或 null 或其他无法转换为字符串的内容?)

    【讨论】:

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

      【讨论】:

        猜你喜欢
        • 2015-09-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 2010-10-13
        • 1970-01-01
        • 2021-09-29
        相关资源
        最近更新 更多