Ложная тревога: 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. Но попробуйте следующее:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx

command->Parameters->AddWithValue("@idx", idx);

Это должно работать и кодировать правильно для вас.

Если вы уверены, что это проблема кавычек, то

Код C#:

idx = idx.Replace("'", "''"); 

решит проблему.

Сожалею.

Проблема была в коде триггера SQL. После их удаления все работало нормально.

Другие вопросы по тегам