我在 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/