2016-01-28 6 views
-1

я база данных содержит имя столбца Code тип nvarchar(50) данных я подключен к базе данных с помощью C# и создал команду SQL в качествеНеверное имя столбца «e01» в SQL запросе

string code = "e01"; 
SqlCommand command = new SqlCommand("select * from inv where code = " + code + ";", conn); 
SqlDataReader reader = command.ExecuteReader(); 

я нашел ошибку говорит

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll 

Additional information: Invalid column name 'e01'. 

и если я, но число вместо e01 она отлично работает ..

+3

После прочтения ответов также читайте о SQL-инъекциях и подготовленных запросах. – SimpleVar

+0

Исправьте инструкцию, чтобы использовать параметры, и вам не нужно беспокоиться о том, как обернуть поля. Параметр будет обрабатывать его для вас. Кроме того, ваш текущий код не является безопасным и может позволить кому-то полностью повредить вашу базу данных. –

+0

Отправляясь на то, что предлагает @SimpleVar, читайте о [маленьких Bobby Tables.] (Https://xkcd.com/327/) –

ответ

0

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

SqlCommand command = new SqlCommand("select * from inv where code = '" + code + "';", conn); 
5

у вас отсутствуют котировки. Попробуйте следующее:

string code = "e01" 
SqlCommand command = new SqlCommand("select * from inv where code = '" + code + "';", conn); 
SqlDataReader reader = command.ExecuteReader(); 

Кроме того, это рекомендуемые параметры использования, а не конкатенация значений. Это позволяет избежать атак sql-инъекций или sql-ошибок, если ваш код содержит специальные символы, например, котировки:

SqlCommand command = new SqlCommand("select * from inv where code = @pCode", conn); 
command.Parameters.Add(new SqlParameter("@pCode", code)); 
SqlDataReader reader = command.ExecuteReader(); 
+2

Вы также должны указать уязвимость SQL-инъекции в этом ... –

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