Я использую C# для вызова динамической c SQL хранимой процедуры на SQL сервере. Я хотел бы связать параметры, чтобы специальные символы, такие как апостроф, не выдавали ошибку.
Проблема здесь в том, что он выдает ошибку при поиске по фамилии О'Брайана, потому что его динамика c SQL, и он читает его буквально и закрывает строку. Я знаю, что могу просто удвоить апостроф, чтобы убежать, но я чувствую, что должен быть другой путь? Я включил голую версию своего кода:
C#
var param = new SqlParameter[]
{
new SqlParameter() {
ParameterName = "@LName",
SqlDbType = System.Data.SqlDbType.VarChar,
Size = 75,
Direction = System.Data.ParameterDirection.Input,
Value = "O'Brian"
},
}
var queryResults = _context.NameSearchReturnQuery.FromSql("sp_NameSearch @LName", param).tolist()
SQL Хранение на сервере Pro c:
PROCEDURE [websrgt].[sp_NameSearch]
@LName nvarchar (75)= null, --last name for the search
begin
declare @SQL nvarchar(MAX);
declare @where nvarchar(max);
set @where = 'where Last_Name like @LName'
set @SQL = 'select * from Name_Table ' + @where
exec sp_executesql @sql, N'@LName nvarchar(75)', @LName
end
go
Когда я прохожу в фамилии с апострофом он читается как буквальный апостроф и закрывает динамическое выражение c SQL. Я хочу иметь возможность передать это значение и выполнить поиск с апострофом, но не закрывать утверждение.
Как я могу это исправить?