参数不存在时出错
本文关键字:出错 不存在 参数 | 更新日期: 2023-09-27 17:59:10
我正在尝试运行插入/返回主键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不存在。
如何解决此问题?
我已经想通了。如果您发送give null作为参数的值,它实际上不会被添加。因此,解决方案(无论如何,对我来说,对你来说,它可能涉及DBNull
)是将null转换为空字符串,如下所示:
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 ?? ""));
您必须在所有参数名称前面加一个@
,这样才能工作:
cmd.Parameters.Add(new SqlParameter("@email",user.EmailAddress));
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
)
或
提交/回滚事务