使用存储过程从Dapper.net查询返回值

yel*_*ver 12 c# sql-server dapper

我试图调用存储过程using Dapper.Net并获取返回值.

p.Add("@INCIDENT_ID", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

var retResults = con.Execute("usp_GetIncidentID", p, commandType:CommandType.StoredProcedure);

int IncidentID = p.Get<int>("INCIDENT_ID"); 
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几个与参数方向不同的东西并使用了"@INCIDENT_ID".如果您单步执行结果,您可以看到值中存在正确的返回值retResults,但我无法按照下面的文档中描述的方式访问这些值.

存储过程Dapper支持完全存储的过程:

var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
    commandType: CommandType.StoredProcedure).First();}}}
If you want something more fancy, you can do:

var p = new DynamicParameters();
p.Add("@a", 11);
p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

cnn.Execute("spMagicProc", p, commandType: commandType.StoredProcedure); 

int b = p.Get<int>("@b");
int c = p.Get<int>("@c");   
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 6

怀疑(未经测试)这与你如何命名参数完全不匹配; 尝试(注意删除@):

p.Add("INCIDENT_ID", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

var retResults = con.Execute("usp_GetIncidentID", p, commandType:CommandType.StoredProcedure);

int IncidentID = p.Get<int>("INCIDENT_ID"); 
Run Code Online (Sandbox Code Playgroud)


小智 1

您可以读取如下值

var incidentId = retResults.ToList()[0].INCIDENT_ID; 
Run Code Online (Sandbox Code Playgroud)

  • 当您尝试获取结果集为空的返回值时,它不起作用! (2认同)