Вот ваш код с добавлением Commandtype
:
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "StoredProcedureName_InsertUserDetails"; // This line is ok
cmd.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar)).Value=name;
cmd.Parameters.Add(new SqlParameter("@age",SqlDbType.Int)).Value=age;
Полезно ли выполнять хранимую процедуру, записывая ее в виде строки?
Что может пойти не так?
- SQL-инъекция?Когда вы устанавливаете
CommandText
как жестко запрограммированную строку, как показано выше, нет возможности для атаки SQL-инъекцией. - Имя хранимой процедуры не синхронизируется с вызывающим кодом: Вы можете получить исключения во время выполнения, если ссылающийся вызывающий код ссылаетсяв неизвестном хранимом процессе.
- Держите ваши скрипты создания хранимых процедур под контролем версий, рядом с вашим кодом, который их использует.Таким образом, можно поддерживать синхронизированную хранимую процедуру с кодом C #.
- Можно создавать автоматические тесты, чтобы определить, есть ли в Stored Proc критические изменения
Есливаша хранимая процедура вставляет только одну сущность UserDetails
, вы также можете использовать Entity Framework. В этой статье показано, как автоматически сопоставить операции CUD сущности ( Create, Update, Delete ) с хранимыми процедурами, вызвав MapToStoredProcedures()
в Fluent API.В статье также объясняется, как вы можете сопоставить свои собственные пользовательские хранимые процедуры с вашими EF-сущностями.