Параметризованный SQL-запрос в Entity Framework, чтобы избежать SQL-инъекций - PullRequest
0 голосов
/ 24 сентября 2018

Я использовал приведенный ниже код для выполнения моего 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 \

...