Когда я запускаю параметризованный запрос 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?
Но в любом случае, это плохая практика - выполнять запрос напрямую из пользовательского ввода, использовать параметры или хранимую процедуру.