Azure SQL 数据库 : "No columns were selected" when calling a stored procedure using Dapper

标签 azure stored-procedures azure-sql-database 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();
}

非常简单。我工作正常,但是当存储过程没有返回结果时,我得到了

'System.InvalidOperationException' in Dapper.dll, "No columns were selected"

调用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 - 因此是异常(exception)。呃!傻我啊!记录下来以防其他人有类似的情况。

关于Azure SQL 数据库 : "No columns were selected" when calling a stored procedure using Dapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074454/

相关文章:

azure - 如何使用逻辑应用修改 Azure 分析服务角色?

sql - 如何在存储过程中使用 DROP TABLE 等命令

azure-sql-database - 通过 Management Studio 连接到 SQL Azure

azure - 在 Azure/AWS 中读/写快照

azure - 如何通过私有(private)链接从Azure数据工厂连接Azure批处理?

azure - 在 WebJob SDK 日志清理过程中,我需要具体清除哪些 Blob 容器?

oracle - 在Oracle中查找存储过程的依赖元素

c# - Azure devops 在部署时在多个数据库上执行 ef core (.Net core 3.0) 迁移 sql 脚本(来自项目存储库)

c# - HDInsight SDK [用于Hadoop的Microsoft .NET SDK]

sql - PLI 关键字的用途是什么?