Ошибка с параметрами не существует? - PullRequest
0 голосов
/ 13 июня 2011

Я пытаюсь запустить SQL-запрос вставки / возврата первичного ключа.

В итоге запрос выглядит следующим образом:

declare @userid as integer;
insert into users (username,emailaddress,passwordhash,salt) values
 (@username,@email,@password,@salt);

set @userid=scope_identity();
insert into groups (name,userid) values ('somegroup',@userid);
select @userid;

Это просто входит в поле SqlCommand.CommandText.Таким образом, это выполняется как один запрос

Затем я добавляю параметры следующим образом: (cmd это SqlCommand объект)

cmd.Parameters.Add(new SqlParameter("@email",user.EmailAddress));
cmd.Parameters.Add(new SqlParameter("@username",user.Username));
cmd.Parameters.Add(new SqlParameter("@salt",user.Salt));
cmd.Parameters.Add(new SqlParameter("@password", user.PasswordHash));

Затем я выполняю запрос с ExecuteScalar(); В этот момент будет выдано сообщение об ошибке, хотя параметр @email не существует.

Как мне решить эту проблему?

Ответы [ 3 ]

2 голосов
/ 13 июня 2011

Я понял это.Если вы передадите значение null в качестве значения параметра, оно фактически не будет добавлено.Таким образом, решение (для меня в любом случае, для вас это может включать DBNull) заключалось в преобразовании нулей в пустые строки следующим образом:

cmd.Parameters.Add(new SqlParameter("@email",user.EmailAddress ?? ""));
cmd.Parameters.Add(new SqlParameter("@username",user.Username));
cmd.Parameters.Add(new SqlParameter("@salt",user.Salt ?? ""));
cmd.Parameters.Add(new SqlParameter("@password", user.PasswordHash ?? ""));
1 голос
/ 13 июня 2011

Вы должны поставить перед всеми именами параметров префикс @, чтобы это работало:

cmd.Parameters.Add(new SqlParameter("@email",user.EmailAddress));
0 голосов
/ 13 июня 2011
using (TransactionScope scope = new TransactionScope())
{
      //Your code should be here in this case, as you are not using SP. 
      //So this will help you in case of multiple users
)

Или

Транзакция фиксации / отката

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...