Azure SQL 数据库:"No columns were selected" 使用 Dapper 调用存储过程时
Azure SQL Database: "No columns were selected" when calling a stored procedure using 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();
}
真的很简单。我工作正常,但是当存储过程 returns 没有结果时,我得到了
'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的BUG,Dapper的代码就好了。 SP 实际上有点复杂(有一些嵌套的 IF-THEN-ELSE),当没有记录匹配条件时它什么都不做,什么都不做 return 可怜的 Dapper 不知道如何将其映射到 DTO - 因此是例外。呸!傻我!记录下来以防其他人有类似的情况。
我在 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();
}
真的很简单。我工作正常,但是当存储过程 returns 没有结果时,我得到了
'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的BUG,Dapper的代码就好了。 SP 实际上有点复杂(有一些嵌套的 IF-THEN-ELSE),当没有记录匹配条件时它什么都不做,什么都不做 return 可怜的 Dapper 不知道如何将其映射到 DTO - 因此是例外。呸!傻我!记录下来以防其他人有类似的情况。