Ложная тревога: SqlCommand, SqlParameter и одинарные кавычки - PullRequest
2 голосов
/ 19 мая 2009

Я пытаюсь исправить ошибку в кавычках в коде:

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 работает хорошо, если type это TEXT, а не VARCHAR.

Есть какие-либо решения, кроме ручного удвоения количества символов кавычек в строке?

Обновление: я попытался вручную отредактировать это поле в SQL Management Studio, и в поле VARCHAR не было одинарных кавычек. Это нормально в SQL?

Ответы [ 4 ]

2 голосов
/ 19 мая 2009

Я подозреваю, что проблема заключается в том, что в названии таблицы указана кавычка, или что idx больше напоминает имя числового типа, чем символьного типа.


На основании вашего обновления я предлагаю вам проверить наличие дополнительных ограничений на таблицу в Management Studio.

1 голос
/ 19 мая 2009

Если честно, у меня никогда не было проблем с SqlParameters. Но попробуйте следующее:

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

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

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

0 голосов
/ 19 мая 2009

К сожалению.

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

0 голосов
/ 19 мая 2009

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

C # код:

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

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

...