2009-05-07 19 views
1

データベースからDAOを読み込むために使用される次のメソッドがあります。 3つの読み取りを実行します.1つはプライマリオブジェクト用、もう1つは翻訳用です。ラインaccount2Name = r.GetValue(0).ToString();C#MySQLパラメータ化クエリの問題

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

私は次のエラーを取得する:

Invalid attempt to access a field before calling Read() 

私は問題が何であるかを理解していない - 前の行の呼び出しを読んでください!

答えて

3

あなたのコードでは以前のように動作しているようです。そこに読んで価値があるあなたは確かに(つまり、あなたのクエリが0行を返すか、nullまたは文字列に変換することができない何か他のものですか?)です

+0

ありがとうございます。 – Elie

1
  1. は、その手順がライン上で正常に動作ように見えaccount1Name = r.GetValue(0).ToString(); 。たぶん、戻り値r.Read()を調べて、最初に行があるかどうかを確認したいでしょう。エラーは「データなしのフィールドにアクセスしようとしました」と解釈される可能性があります...
  2. クエリから単一の値を取得しようとしているようです。 ExecuteReader()の代わりにExecuteScalar()メソッドを調べるとよいでしょう。