Когда я запускаю параметризованный запрос 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;  

2 ответа

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

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

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]);

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

Смотрите эту ветку: Как мне избежать одиночной кавычки в SQL Server?

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

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