2014-11-06 4 views
-3

Вот мой код ... Он отлично работает для входных данных, у которых нет отдельной цитаты, но когда я ввожу одну цитату и пытаюсь отправить ее сбой. Я пробовал много примеров кода, и это должно сработать. Любая помощь будет оценена по достоинству.Когда я запускаю параметризованный запрос C# для обработки одиночных кавычек, он по-прежнему выдает ошибку исключения для одной кавычки. Как я могу сделать эту работу?

string SQLcommand = "UPDATE FirearmTracking SET LastName='" 
+ @custData[2] + // lastName 
"', CitationNum='" + custData[1] + // citation 
"', FirstName='" + custData[3] + // firstname 
"', MiddleInitial='" + custData[4] + // mi 
"' WHERE EventNum = '" + @custData[0] + // eventNum 
      "' "; 
     // Create a new table 
     DataTable FirearmTracking = new DataTable(); 

     // Grab the Connection String 
     SqlConnection conn = Connections.GetDataFromDB(); 

     // Create a SqlCommand object 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = conn; 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = SQLcommand; 

     cmd.Parameters.AddWithValue("@LastName", custData[2]); 

     try 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception) 
     { 
      throw new Exception("Data Layer - Customer Error..."); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
     return null; 
+3

использование параметров. Не конкатенация строк. Период. –

+0

Либо использовать параметры, либо преобразовать их в хранимую процедуру, это довольно грязно в текущем состоянии и подвержено SQL Injection – MethodMan

+1

Кроме того, это не «параметр с параметрами C#». Это может быть «SQL Server Parameterized Query», но сам запрос не имеет ничего общего с C#. То, как вы это делаете, - плохая идея в языке _any_. –

ответ

0

У вас есть эта проблема, потому что вам нужно избежать одиночной кавычки, удвоив их.

Смотрите эту тему: How do I escape a single quote in SQL Server?

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

+0

Спасибо за быстрый ответ, это хорошо знать –

3

Вы настраиваете параметр, но запрос его не использует.

имена параметров Put в запросе вместо конкатенации в значениях:

string SQLcommand = 
    "UPDATE FirearmTracking SET " + 
    "LastName = @LastName, " + 
    "CitationNum = @CitationNum, " + 
    "FirstName = @FirstName, " + 
    "MiddleInitial = @MiddleInitial " + 
    "WHERE EventNum = @EventNum"; 

Теперь добавить параметры для них: только

cmd.Parameters.AddWithValue("@LastName", custData[2]); 
cmd.Parameters.AddWithValue("@CitationNum", custData[1]); 
cmd.Parameters.AddWithValue("@FirstName", custData[3]); 
cmd.Parameters.AddWithValue("@MiddleInitial", custData[4]); 
cmd.Parameters.AddWithValue("@EventNum", custData[0]); 
+0

Это было! Спасибо. Все остальные примеры, которые я видел, помещали @ перед полями значений в команде «Обновить». ... Я потратил около шести часов на это сегодня и думал, что схожу с ума. Спасибо. –

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

  • Нет связанных вопросов^_^