Ложная тревога: SqlCommand, SqlParameter и одинарные кавычки
Я пытаюсь исправить ошибку в кавычках в коде:
std::string Index;
connection->Open();
String^ sTableName = gcnew String(TableName.c_str());
String^ insertstring = String::Format("INSERT INTO {0} (idx, rec, date) VALUES (@idx, @rec, getdate())", sTableName);
SqlCommand^ command = gcnew SqlCommand(insertstring, connection);
String^ idx = gcnew String(Index.c_str());
command->Parameters->Add("@idx", SqlDbType::VarChar)->Value = idx;
Ошибка заключается в том, что если idx="that", SQL не может сказать, что есть синтаксическая ошибка. Очевидно, проблема в цитате. Но некоторые поиски в Google показывают, что использование параметров - это способ работы с кавычками. И SqlParameter работает хорошо, если тип TEXT, а не VARCHAR.
Есть какие-то решения, кроме ручного удвоения количества символов кавычки в строке?
Обновление: я пытался вручную редактировать это поле в SQL Management Studio, и в поле VARCHAR не было одинарных кавычек. Это нормально в SQL?
4 ответа
Я подозреваю, что проблема заключается в получении кавычки в имени вашей таблицы или в том, что idx больше похож на имя числового типа, чем символьного типа.
Основываясь на вашем обновлении, я предлагаю вам проверить наличие дополнительных ограничений на таблицу в Management Studio.
Если честно, у меня никогда не было проблем с SqlParameters. Но попробуйте следующее:
command->Parameters->AddWithValue("@idx", idx);
Это должно работать и кодировать правильно для вас.
Если вы уверены, что это проблема кавычек, то
Код C#:
idx = idx.Replace("'", "''");
решит проблему.
Сожалею.
Проблема была в коде триггера SQL. После их удаления все работало нормально.