Я использовал приведенный ниже код для выполнения моего SQL-запроса, который выглядит примерно так:
SELECT abc.... FROM .... (many joins).. WHERE userid =" + userId + " AND UserState = " +userState ...; (Other parameters)
Ниже показано, как я выполняю запрос и возвращаю datatable
using (var context = new DbContext())
{
DataTable dt= new DataTable();
var conn = context.Database.Connection;
var connectionState = conn.State;
try
{
if (connectionState != ConnectionState.Open)
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = buildveryLongQuery(userId,userState);
cmd.CommandType = CommandType.Text;
using (var reader = cmd.ExecuteReader())
{
if (reader.HasRows)
dt.Load(reader);
}
}
}
выше.Метод работает нормально, но обеспечивает SQL-инъекцию.как я могу его параметризовать?
Я попробовал следующий метод:
Изменен запрос для использования @ userId
IDbDataParameter personParam = cmd.CreateParameter();
personParam.DbType = DbType.Int32;
personParam.ParameterName = "@userId";
personParam.Value = userId;
, но я получаю ошибку ниже
Необходимо объявить скалярную переменную \ "@ userId \