Azure SQL数据库:使用Dapper调用存储过程时未选择任何列 [英] Azure SQL Database: "No columns were selected" when calling a stored procedure using Dapper
本文介绍了Azure SQL数据库:使用Dapper调用存储过程时未选择任何列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Azure SQL数据库中有一个非常简单的存储过程:
CREATE PROCEDURE dbo.spfindPartialIdentity
@ClientId nvarchar(50),
@ExternalId nvarchar(250)
AS BEGIN
SET NOCOUNT ON;
SELECT
ClientId, ExternalId
FROM
[dbo].[PartialIdentities]
WHERE
ClientId = @ClientId AND ExternalId = @ExternalId
END
我使用Dapper从我的存储库中调用它:
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ReportingDB"].ConnectionString))
{
await conn.OpenAsync();
var res = await conn.QueryAsync<PartialIdentity>("dbo.spfindPartialIdentity",
new { ClientId = clientId, ExternalId = externalId },
commandType: CommandType.StoredProcedure,
commandTimeout: GetCommandTimeout());
return res.ToList();
}
非常简单。我工作得很好,但是当存储过程没有返回任何结果时,我得到一个
Dapper.dll中的‘System.InvalidOperationException’,"未选择任何列"
调用QueryAsync()
时异常。我的DTO也很简单:
public class PartialIdentity
{
public PartialIdentity(string clientId, string externalId)
{
this.ClientId = clientId;
this.ExternalId = externalId;
}
public string ClientId { get; set; }
public string ExternalId { get; set; }
}
我也尝试了QueryMultipleAsync()
,结果相同。
有什么问题?提前感谢
推荐答案
原来是我的SP中的错误,Dapper代码没有问题。SP实际上稍微复杂一些(带有一些嵌套的if-Then-Else),当没有符合条件的记录时,它不执行任何操作,不返回任何内容,可怜的Dapper不知道如何将其映射到DTO-因此出现了异常。啊!我真傻!记录下来,以防其他人有类似的情况。
这篇关于Azure SQL数据库:使用Dapper调用存储过程时未选择任何列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文