2009-05-07 3 views
1

데이터베이스에서 DAO를 채우는 데 사용되는 다음 방법이 있습니다. 3 회의 읽기를 수행합니다. 하나는 기본 객체이고 다른 하나는 일부 번역입니다.C# MySQL 매개 변수화 된 쿼리 문제

나는 다음과 같은 오류 얻을 줄 account2Name = r.GetValue(0).ToString();
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 또는 문자열로 변환 할 수없는 뭔가 다른?) 그 절차는 선 account1Name = r.GetValue(0).ToString();에 잘 작동처럼

+0

감사합니다. – Elie

1
  1. 가 보이는 . 어쩌면 r.Read()의 반환 값을 확인하여 먼저 행이 있는지 확인하려고합니다. 오류는 "데이터가없는 필드에 액세스하려고했습니다"라고 해석 될 수 있습니다 ...
  2. 쿼리에서 단일 값을 얻으려고하는 것 같습니다. ExecuteReader() 대신 ExecuteScalar() 메소드를 조사하는 것이 좋습니다.
관련 문제