2013-07-15 3 views
0

Я получаю следующую ошибкуВставка SQL Значение в таблицу базы данных

синтаксиса не правильный номер рядом пункта

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

string strOrderDetails = 
    "INSERT INTO Orders (Order Number, Item Number, Description, Price) " + 
    "VALUES ('" + strOrderNo.Replace("'", "''").ToString() + "', '" 
      + intItemNo + "', '" 
      + strDesc.Replace("'", "''").ToString() + "', '" 
      + decPrice + "')"; 

Об исполнении выше, где код падает и заявляет, что есть ошибка рядом с номером позиции слова?

Нужно ли что-то делать с intItemNo, так как это целое число?

+1

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

вы можете попробовать с квадратными скобками столбцов, которые имеют такие пробелы, как [[Номер заказа], [Номер позиции], ....) –

+1

Пожалуйста, пожалуйста, сделайте то, что говорит Стив, ниже. Параметризированные запросы всегда являются лучшей идеей. Он также обеспечивает правильное удаление ваших объектов 'SqlCommand' и' SqlConnection' с ключевым словом 'using'. –

ответ

4

Когда столбец содержит пробелы, нужно заключить его в квадратные скобки или другой разделитель для Выбирается базы данных

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

string strOrderDetails = "INSERT INTO Orders ([Order Number], [Item Number]," + 
         "Description, Price) VALUES (@ordNum, @temNo, @desc, @price"; 
using(SqlConnection cn = new SqlConnection(conString)) 
using(SqlCommand cmd = new SqlCommand(strOrderDetails, cn)) 
{ 
    cn.Open(); 
    cmd.Parameters.AddWithValue("@ordNum",strOrderNo); 
    cmd.Parameters.AddWithValue("@itemNo",intItemNo); 
    cmd.Parameters.AddWithValue("@desc",strDesc); 
    cmd.Parameters.AddWithValue("@price", decPrice); 
    cmd.ExecuteNonQuery(); 
} 

Как вы могли заметить, используя параметры устраняют необходимость написания кода для обработки кавычки входных значений, а также исключить возможность Sql Injection атак

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