2013-05-03 3 views
0

Я запустил команду без ошибок в mysql. моя другая команда работает нормально, но этот код не работает. кто-нибудь знает, что произойдет с этим кодом.«Указанный ключ отсутствовал в словаре» при выполнении mysqldatareader в C#

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

Код счетный здесь дал мне ошибку, что

«Данный ключ не присутствовал в словаре.»

на линии Line 158:

MySqlDataReader rdr = cmd.ExecuteReader(); 

ли кто-то знает, что не так происходит с этим кодом? Я добавил CharSet=utf8; в connectionstring, поскольку люди предлагают в SO.

В базе данных я использую MariaDB и разъем туздо последний разъем. Кто-нибудь знает, есть ли у этого проблемы.

У меня нет проблем, пока я запускаю свою другую функцию. Проблема возникает в этой единственной функции, где я использую выполнение 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, и я уверен? должно сработать. Обратитесь к статье, которая делает ваш код. – user2126670

+0

Я получил свой ответ от: http://stackoverflow.com/questions/652978/parameterized-query-for-mysql-with-c-sharp –

+0

Downvoters, пожалуйста, прокомментируйте почему. –

1

Вы бы использовать @ вместо из? как вы вызываете параметр из SQL, который должен быть вызван в SQL, как: @userID (независимо от типа оно, VARCHAR, INT и т.д.)

Так что ваш SQL прок должен выглядеть следующим образом

Select * 
From (TableName) 
Where userID = @UserID 

Так в вашей форме вы должны называть @UserID, поскольку это параметр, который вы передали в sql.

+0

Я пробовал в обоих направлениях, но ни один из них не работал в случае execereader на mysql. все еще имеют такую ​​же проблему. – user2126670

+0

Вы назвали @userID выше кода, который я вам предоставил? Ищите ошибки типа в вашей работе, возможно, вы вызываете параметр с заглавной буквой где-нибудь, когда он должен быть в нижнем регистре. –

+0

Я попробовал, но не получил работу. Я вещь cmd.parameter.addwithvalue com с исключением, если это будет иметь что-то неправильное. – user2126670