【问题标题】:How to get both the numeric return value and the select statement from a stored procedure concurrently?如何同时从存储过程中获取数字返回值和选择语句?
【发布时间】:2020-07-14 15:56:27
【问题描述】:

我的任务是用使用 Dapper 的 .Net Core 应用程序来替换企业有时会购买的那些讨厌的“基于 GUI 的编程”的东西(现在他们已经意识到这是一个可怕的错误并制作了垃圾代码)。

我不能按原样更改存储的过程。

被调用的 proc 包含两个值,一个 select 语句和一个 return 值,这两个值都由应用程序以某种方式检索。我们看不到应用程序是如何做到的;这在专有的“核心”库中被混淆了。它看起来像这样:

--things it does
Select Prop1, Prop2, Prop3 from TheTable;
Return 0; --success

(我无法粘贴实际查询,因为我们有激进的网络安全,但这是其背后的基本逻辑。没有 OUT 参数。)

当我使用 Dapper 的 ExecuteAsync( 方法时,我只能得到一个返回值 0 或 null,具体取决于返回值。我尝试将其更改为 Query ,但我总是得到空值,即使有一个值给 SSMS 中的 proc 相同的参数。

var result = await _dbc.QueryFirstOrDefaultAsync<dynamic>("storedproc", paramsObject);

我怎样才能获取 select 语句的结果不改变存储过程以返回两个变量?

【问题讨论】:

  • 请向我们展示您正在使用的简洁代码?存储过程是什么样子的?是用OUT参数吗?

标签: c# sql .net stored-procedures dapper


【解决方案1】:

添加一个输出参数来捕获返回码。

EG

var result = await _dbc.QueryFirstOrDefaultAsync<dynamic>("exec @rc = storedproc", paramsObject);

或者使用带有 ReturnValue 参数的 CommandType.Stored 过程。每Passing Output parameters to stored procedure using dapper in c# code

【讨论】:

  • 很遗憾,不是返回码包含所需的数据;我们正在寻找从 proc 中得到的数据集。
  • Daper 的 Queryxxx 方法从 proc 返回结果集。如果您感到困惑,只需使用参数化 SQL 语句恢复到 ExecuteReader()。这是运行查询的最低级 API,并且公开了最多的功能。
猜你喜欢
  • 1970-01-01
  • 2018-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多