2012-07-13 3 views
0

오류가 발생했습니다 : Read() 을 호출하기 전에 필드에 액세스하려는 시도가 잘못되었습니다. string result = Reader.GetString (0);Read()를 호출하기 전에 필드에 액세스 할 수 없습니다.

내가 할 것을 완전히 확실하지 않다 또는 무슨 잘못

internal int GetCharGuidByName(string charactername, MySqlConnection connection) 
{ 
    MySqlCommand command = connection.CreateCommand(); 
    MySqlDataReader Reader; 
    command.CommandText = "SELECT guid FROM characters WHERE name=\""+charactername+"\";"; 
    // Initialize MySQL Reader 
    Reader = command.ExecuteReader(); 
    Reader.Read(); 
    string result = Reader.GetString(0); 
    // If the character doesn't exist or isn't entered, return 0 
    int charguid = 0; 
    if (result != String.Empty) 
    { 
     charguid = Convert.ToInt32(result); 
    } 
    return charguid; 
} 
+1

당신이 command.ExecuteReader 방법에 독자를 asigning 전에 연결을 열었습니다? 그리고 Reader.Read()를 if (Reader.Read()) {...}로 변경하고 읽을 결과가 없으면 if 문으로 넘어 가지 않습니다. –

+0

예, 연결이 열려 있고 함수에서 수신 된 연결을 사용하지 않고이 함수 내에서 연결을 시도한 다음 연결을 시도합니다. – user1071461

답변

3

변경 비록 코드 :

Reader = command.ExecuteReader(); 
int charguid = 0; 
if(Reader.Read()) 
{ 
    if(Reader[0] != DBNull.Value) 
    { 
     if(int.TryParse(Reader[0].ToString(), out charguid)) 
     { 
     //value read and is an integer! 
     } 
    } 
} 
return charguid; 
+0

두 가지 오류가 발생합니다. 'int .Parse (string, System.IFormatProvider) '에 잘못된 인수가 있고 인수 2 :이 코드에서'int int '에서'System.IFormatProvider '로 변환 할 수 없습니다. – user1071461

+1

코드가 변경되었습니다. –

+0

대단히 고마워요, 작동합니다 ^^ – user1071461

2

대신

ExecuteSaclar returns the first column of the first row in the result set, or a null reference

ExecuteReader will return as resultset which you have to then iterate to read

가 ExecuteReader

의 ExecuteScalar는을 사용한다 따라서 코드를 살펴보면 결과 집합의 첫 번째 열만 입력하면됩니다.

internal int GetCharGuidByName(string charactername, MySqlConnection connection) 
{ 
    int charguid = 0; 

    using(MySqlCommand command = connection.CreateCommand()) 
    { 
     command.CommandText = "SELECT guid FROM characters WHERE name=\""+charactername+"\";"; 
     object obj = command.ExecuteScalar(); 
     if (obj != null && obj != DBNull.Value) 
     { 
     charguid = Convert.ToInt32(obj); 
     } 
    } 

     return charguid; 
} 
0
  openConnection() 

      sql = "SELECT last, first, emp_type, active FROM employee INNER JOIN account ON employee.emp_id = account.emp_id WHERE employee.emp_id = '" & AtxtEmpID.Text & "'" 

      command = New MySqlCommand(sql, mySqlConnection) 

      reader = command.ExecuteReader 

      reader.Read() 

      AtxtEmpName.Text = reader.Item(0) & ", " & reader.Item(1) 

      closeConn() 

은이 문제에 저장이

관련 문제