2015-04-30 3 views
0

Я использую код ниже, чтобы получить количество записей в базе данных, но почему-то не работает.Запрос, чтобы получить количество записей из базы данных MS Access

бросает мне ошибку:

Input string was not in a correct format.

conn.Open();      
OleDbCommand cmd1 = new OleDbCommand(); 
cmd1.CommandText = "select count(*) from Orders_Description where (ItemCode=" + Convert.ToInt32(row.Cells[1].Value) + ") and (OrderId=" + Convert.ToInt32(txtOrderNo.Text) + ")"; 
int recordExists = Convert.ToInt32(cmd1.ExecuteScalar()); 
if (recordExists > 0) 
{ 
    //Insert command if record exists. 
} 
+1

Каковы значения 'row.Cells [1] .Value' и' txtOrderNo.Text' точно? Что такое «CurrentCulture»? Отлаживайте свой код и рассказывайте нам. И всегда используйте [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. –

+0

'row.Cells [1] .Value' и' txtOrderNo.Text' содержит целочисленные значения, а в базе данных также есть целое число –

+0

Ваш комментарий не помогает вообще. Каковы эти значения ** точно **? Каковы типы столбцов «ItemCode» и «OrderId»? –

ответ

0

Эта ошибка исходит от Convert.ToInt32, где вы строите свой SQL-запрос. Это означает, что либо txtOrderNo.Text, либо row.Cells[1].Value содержат нецелые значения, десятичные точки или просто пустые строки. Из документации MSDN для Convert.ToInt32FormatException будет сгенерировано, когда:

value does not consist of an optional sign followed by a sequence of digits (0 through 9).

Кроме того, вы (попробуйте) преобразовать число в Int32, но затем использовать их как строки, в режиме резервирования. Простым решением было бы удалить операцию преобразования, но это все равно оставит вас с недопустимым оператором SQL и будет очень открытым для SQL-инъекций.

+0

спасибо '@ DavidG' ... Я преобразовал пустое текстовое поле в целое. Это причина возникновения ошибки. –

0

и нужны единичные расценки до и после значений, присвоенных OrderId в случае тип данных этого поля является NVARCHAR эквивалент (не число).

код:

(OrderId =»+ Convert.ToInt32 (txtOrderNo.Text) + ")";

правильный код с одиночными qutations вставлено:

(OrderId = '» + txtOrderNo.Text + "')";

+0

Откуда вы знаете, что тип столбца «ItemCode»? Это числовое значение, OP не нужно использовать одинарные кавычки. –

+0

как я объяснил, его в случае, когда тип этого поля эквивалентен nvarchar (не числовой) –

+0

@ MladenOršolić: Я пробовал с одинарными кавычками, но дает ту же ошибку .. 'ItemCode' и' OrderId' имеет тип Integer в базе данных –

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