2014-10-12 2 views
1
OleDbCommand computerStatus = new OleDbCommand("update Computer SET Status= 'Occupied' where PcNumber='" + cboComputerNo.Text + "'", con); 
computerStatus.ExecuteNonQuery(); 

это мой код. pcNumber - это autonumber. Я получаю сообщение об ошибке, которое хочет, чтобы я изменил тип данных на строку, но мне нужно, чтобы он был автономен.Тип данных несоответствие в выражении критериев Доступность 2013

+1

Используйте параметры, чтобы избежать инъекции sql. Используйте int.TryParse, чтобы преобразовать текст в число. – LarsTech

+0

уже использовался TryParse и int.parse не работал для меня 1-й раз с использованием параметра. –

ответ

0

AutoNumber есть авто номер. Поскольку это числовое значение, вам не нужно использовать одинарные кавычки с ним.

Но, что более важно, вы всегда должны использовать parameterized queries. Этот тип конкатенаций строк открыт для атак SQL Injection.

Также используйте using statement для утилизации OleDbConnection и OleDbCommand.

using(OleDbConnection con = new OleDbConnection(conString)) 
using(OleDbCommand computerStatus = con.CreateCommand()) 
{ 
    computerStatus.CommandText = "update Computer SET Status= ? where PcNumber = ?"; 
    computerStatus.Parameters.AddWithValue("@status", "Occupied"); 
    computerStatus.Parameters.AddWithValue("@number", cboComputerNo.Text); 
    computerStatus.ExecuteNonQuery(); 
} 

Как отметил LarsTech, вы можете хотите проверить cboComputerNo.Text строку является действительным числом с помощью Int.TryParse method.

+0

Почему мне нужно использовать с помощью? почему бы не сделать его меньше в коде? –

+0

@AllanPatrickCaldito Использование инструкции утилизирует ресурсы управления. Проверьте эти вопросы: http://stackoverflow.com/questions/10057334/when-should-i-use-the-using-statement и http://stackoverflow.com/questions/212198/what-is-the-c- острое использование-блочный и-почему-должны-я потребительной его –

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