2013-12-06 21 views
2

Это мой код:System.Data.OleDb.OleDbException: Несоответствие типов данных в выражении критериев

OleDbCommand Cmd = new OleDbCommand(); 
Cmd.Connection = MyConn; 
Cmd.CommandText = "SELECT * FROM catalogue WHERE id = '" + questionid + "'"; 

OleDbDataReader read = Cmd.ExecuteReader(); 

int id = 0; 

while (read.Read()) 
{ 
    id = Convert.ToInt32(read["id"]); 
} 

Вот ошибка это дает мне:

Line 27:   Cmd.CommandText = "SELECT * FROM catalogue WHERE id = '" + questionid + "'"; 
Line 28: 
Line 29:   OleDbDataReader read = Cmd.ExecuteReader(); // The error is here 
Line 30: 
Line 31:   int id = 0; 

Я знаю, что есть также another question about the same issue на Stack Overflow, но он, похоже, не решает мою проблему (он может решить вашу проблему, поэтому я добавил ссылку).

+0

Вы могли бы указать, на какой строке это исключение? код кажется прекрасным. –

+0

«Вопросы и ответы» в 'каталоге' имеют одинаковый/эквивалентный тип данных. Если да, убедитесь, что вопрос не равен нулю. Хороший пункт by @nvoigt, вы должны использовать параметры –

ответ

3

Пожалуйста, узнайте о using blocks для всех ваших устройств, включая подключение к базе данных, команду и считыватели.

Ваш код уязвим для sql injection, вы можете исправить это с помощью параметров.

Наконец, я подозреваю, что ваше поле id в базе данных имеет целочисленный тип, поэтому использование котировок вокруг значения является ошибкой. Но, пожалуйста, прочитайте параметры, а не исправляйте это. Параметры все равно избавятся от этой проблемы.

+0

Это действительно целочисленный тип. И это то, что я узнал сегодня! Спасибо! – think123

+0

@ think123 на самом деле ваш запрос очень хорошо, если это «запрос SQL Server», я недостаточно опытен с OleDb, но его поведение немного раздражает. –

+0

@KingKing Да, но я застрял в доступе. Я пришел из MySQL, поэтому я не очень хорошо разбирался в таких строгих правилах. – think123

Смежные вопросы