访问输出参数有点尴尬;您需要以通常的方式将它们添加到参数集合中,使用 a .Direction
of Output
。然后你可以在执行该方法后读取.Value
参数对象的。但是:因此使用和处理它要容易得多。请注意,值可以以类似的方式完成,但使用适当的. 在这种情况下,你和它都让它变得更加有趣......我只是个人使用这个部分。或者...抛出异常 ( )。select
return
.Direction
output
return
output
raiserrror
就像是:
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "p1";
cmd.CommandType = CommandType.StoredProcedure;
var name = cmd.CreateParameter();
name.ParameterName = "@name1";
name.Value = "abc"; // etc
cmd.Parameters.Add(name);
var err = cmd.CreateParameter();
err.ParameterName = "@rErr";
err.Direction = ParameterDirection.Output;
cmd.Parameters.Add(err);
cmd.ExecuteNonQuery();
if (err.Value is int i)
{
// error i happened
}
}
但是:如果您刚刚使用过:
raiserror (50001, 16, 1) -- severity needs to be at least 16 here; typically = 16
或(在较新的 SQL Server 版本中):
throw 50001, 'oops', 1
您可以更轻松地获得类似的结果;这将导致Exception
来自 ADO.NET 层的方向。
(请注意,您应该sysmessages
在使用时正式添加自定义错误消息raiserror
-throw
不需要该步骤)
如果您使用throw
(or raiserror
) 方法并删除参数,则在Dapperoutput
的帮助下,整段代码可能会变成:
conn.Execute("p1", new { name1 = "abc" }, commandType: CommandType.StoredProcedure);
这更容易做对!