2013-05-03 16 views
0

mysql에서 아무런 오류없이 명령을 실행했습니다. 내 다른 명령을 잘 실행하지만이 코드는 작동하지 않습니다. 어떤 사람이이 코드로 어떤 일이 발생하는지 압니다.C에서 mysqldatareader를 실행할 때 "지정된 키가 사전에 없습니다."

private static User GetUser(MySqlCommand cmd) 
     { 
      User usr = new User(); 

      MySqlDataReader rdr = cmd.ExecuteReader(); 
      if (rdr.HasRows) 
      { 
       while (rdr.Read()) 
       { 
        usr.Id = Convert.ToInt32(rdr["Id"]); 
        usr.Level = (Level)Enum.Parse(typeof(Level), rdr["level"].ToString()); 
        usr.Email = rdr["email"].ToString(); 
        usr.CreatedDate = Convert.ToDateTime(rdr["createdDate"].ToString()); 
        usr.LastLoginDate = Convert.ToDateTime(rdr["lastLoginDate"].ToString()); 
       } 
      } 

      return usr; 
     } 

public static User GetUserFromID(int userID) 
     { 
      string qry = "SELECT * FROM user WHERE ID = ?userID"; 

      User user = new User(); 
      MySqlConnection cnn = new MySqlConnection(Globals.CONNSTRING); 
      cnn.Open(); 

      using (cnn) 
      { 
       MySqlCommand cmd = new MySqlCommand(qry, cnn); 
       cmd.Parameters.AddWithValue("userID", userID); 

       user = GetUser(cmd); 

      } 
      cnn.Close(); 
      return user; 
     } 

내가 여기에 붙여 넣기 코드는

는 "주어진 키가 사전에 존재하지 않았다."고 나에게 오류를 준

MySqlDataReader rdr = cmd.ExecuteReader(); 

사람이 잘못이 코드 일어날 뭔지 알아 : 라인 158의 라인에

? 사람들이 SO에서 제안하는 것처럼 나는 CharSet=utf8;을 connectionstring에 추가했습니다.

내가 사용하는 데이터베이스는 mariaDB과 커넥터는 MySQL의 최신 커넥터입니다. 이것이 어떤 문제가 있다면 누군가 알고 있습니다.

다른 기능을 실행하는 동안 문제가 없습니다. 이 문제는 mysqldatareader 실행을 사용하는 단일 함수에서 발생한다.

+0

@DGibbs 감사하지만 혼란 스러워요. 내 다른 쿼리는 C#으로 작성된 잘 작동합니다. 저는 사람들이 답을 들으면서 utf-8을 설정했습니다. 이제 매개 변수가 올바르게 설정되었는지 확인합니다. 나는 뭔가를 놓친다. 그것을 확인할 수 있습니까 :) – user2126670

+0

'Globals.connString'이란 무엇입니까? 'cnn'의 값은 무엇입니까? 연결 문자열이 맞습니까? –

+0

@ SonerGönül 예, 그것은 내가 작성한 다른 함수에 대한 작업이며 mysqlhelper에서 호출합니다. mysqlexecutereader로 작성된이 단일 함수는 문제를 일으킨다. 글쎄, 나는 여기에 올린 사람 1 기능을 작성했습니다. – user2126670

답변

1

? 대신 @를 사용해보십시오 : 그래서

:

string qry = "SELECT * FROM user WHERE ID = @userID"; 

cmd.Parameters.AddWithValue("@userID", userID); 

으로 MySQL을의 페이지에 설명 : http://dev.mysql.com/doc/refman/5.0/en/connector-net-tutorials-intro.html#connector-net-tutorials-parameters

+0

+1 도움을 주겠습니까, 대답 뒤에 이유를 말해주십시오, 나는 MySQL을 사용하고 있으며 확실합니까? 작동해야합니다. 당신이 주어진 code'way 할 기사를 참조하십시오 – user2126670

+0

나는 내 대답을 가지고 : http://stackoverflow.com/questions/652978/parameterized-query-for-mysql-with-c-sharp –

+0

Downvoters, 이유를 적어주세요. –

1
당신이 사용하는 것이

@ 대신 의 ? 당신은 SQL에서 호출 할 필요가 SQL에서 매개 변수를 호출하는 다음과 같음 :

그래서 당신의 SQL PROC 그래서이

Select * 
From (TableName) 
Where userID = @UserID 

과 같아야합니다 (이, VARCHAR 무엇이든 유형, INT 등) @userID 귀하의 양식에서 당신은 SQL에서 전달 된 매개 변수 인 @UserID를 호출 할 것입니다.

+0

두 가지 방법을 시도했지만 mysql에서 executereader의 경우에는 아무 것도 작동하지 않았습니다. 여전히 같은 문제가 있습니다. – user2126670

+0

내가 제공 한 코드 위에 @userID를 호출 했습니까? 작업에서 유형 오류를 찾으십시오. 대문자로 된 매개 변수를 소문자 일 때 어딘가에 호출하는 것이 좋습니다. –

+0

나는 그것을 시도했지만 그것을 얻지 못했습니다. 이 일이 잘못되면 cmd.parameter.addwithvalue com 예외가 발생합니다. – user2126670

관련 문제