2013-05-05 1 views
0

Я пытаюсь обновить базу данных с помощью OleDb и .Net4.5.Двойные кавычки с обновлением Sql

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

Вот пример запроса:

string strRequest = "update " + strNomTable.Trim() + " set " 
+ "evenotes = " + '"' + m_strNote.ToString().Trim() + '"' 
+ " where eveNum = " + '"' + strEvtNumeroString.Trim() + '"'; 

У вас представление о том, как я мог бы избежать простых и двойных кавычек? Примечание. Я попытался использовать SQL-параметризованные обновления, но моя база данных не поддерживает это.

Спасибо большое,

С наилучшими пожеланиями,

Nixeus

+0

Какую базу данных используете? –

+0

База данных Visual Fox Pro (файл DBF) с VFP OleDb. –

+2

Просто подсказка, String.Format() может помочь сделать строки запросов более читабельными. –

ответ

1

Несколько вариантов приходят на ум. Поскольку я не знаю, какую базу данных вы используете, я просто догадываюсь:

  1. Использовать параметры. Я знаю, что вы это пробовали, но я бы предложил попробовать еще раз. Если это не удается, попробуйте выполнить следующее:
  2. Удалите запятую для «где» (одна строка вверх!).
  3. Измените все свои двойные кавычки внутри вашего SQL-оператора в одинарные кавычки. Дословный текст должен быть цитатами как "'" + m_strNote.ToString().Trim() + "'" и не '"' + m_strNote.ToString().Trim() + '"'
  4. Заменить все одиночные или одиночные кавычки («) в ваших значениях с двойными одинарными кавычками (» '): "'" + m_strNote.ToString().Trim().Replace("'", "''") + "'"

Если объединить вариант 2 до 4 вы получите это:

string strRequest = "update " + strNomTable.Trim() + " set " 
+ "evenotes = '" + m_strNote.ToString().Trim().Replace("'", "''") + "' " 
+ "where eveNum = '" + strEvtNumeroString.Trim().Replace("'", "''") + "'"; 

Визуальная Fox Pro Database и OleDbParameters

Вы можете использовать OleDbParameters. Начните имя с @. So:

OleDbCommand command = new OleDbCommand(
    "update " + strNomTable.Trim() + " set " 
    + "evenotes = @evenotes " 
    + "where eveNum = @eveNum"); 
command.Parameters.AddWithValue("@evenotes", m_strNote.ToString().Trim()); 
command.Parameters.AddWithValue("@eveNum", strEvtNumeroString.Trim()); 
+0

Я попытался использовать Parametrized, но у меня есть ошибка «синтаксическая ошибка»: \ –

+0

Вот почему я предложил вам еще два варианта. Но perhapse вы могли бы создать другой вопрос, опубликовать свой код с параметрами и спросить, видит ли кто-нибудь ошибку. Многие люди верят в правильный путь к легкому и блужданию с правильного пути. –

+0

Я уже прошу о параметрических успехах! Кроме того, я попробовал свое второе решение (.replace()) с ошибкой sql :( –