Azure SQL数据库:使用Dapper调用存储过程时未选择任何列 [英] Azure SQL Database: "No columns were selected" when calling a stored procedure using Dapper

查看:0
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆