当我使用 C# 字典中的 Dapper DynamicParameter 时,未向存储过程提供参数
Parameter not provided to the stored procedure when I use Dapper DynamicParameter from C# dictionary
我正在使用 Dapper DynamicParameters
以便将参数字典从我的 .NET Core 应用程序发送到 SQL 服务器,但我收到错误消息:
Parameter @cityName1 is not provided
但是当我跟踪查询时,我可以看到它存在。
这是代码:
填字典:
Dictionary<string, object> cities = new Dictionary<string, object>();
cities.Add("@cityName1", "New-York");
cities.Add("@cityId1", 123);
对Dapper的调用:
DynamicParameters dbArgs = new DynamicParameters();
foreach (var pair in cities)
{
dbArgs.Add(pair.Key, pair.Value);
}
return await connection.QueryAsync<Provider>(SQL_GET_LINKS_BY_CITIES, dbArgs);
存储过程:
CREATE PROCEDURE [dbo].[hp_GetLinksByCities]
(@cityName1 NVARCHAR(25),
@cityId1 INT)
AS
BEGIN
-- code
END
来自探查器的跟踪:
exec sp_executesql N'[dbo].[hp_GetLinksByCities]',N'@cityName1 nvarchar(4000),@cityId1 int',@cityName1=N'Marseille',@cityId1=1970
错误
原文(法语):
La procédure ou fonction 'hp_GetLinksByCities' attend le paramètre '@cityName1', qui n'a pas été fourni.
翻译成英语:
The stored procedure or function 'hp_GetLinksByCities' is expecting a '@cityName1' parameter which was not supplied
当我在 SSMS 中执行这段代码时,我遇到了同样的错误,但是使用这种语法,它工作正常:
exec [dbo].[hp_sp_GetDirectoryPageLinksByCities] @cityName1=N'Marseille',@cityId1=1970
通常情况下,Dapper 会以这种方式发送订单,而且效果很好。为什么这次的行为有所不同?
我不知道出了什么问题...我需要以不同的方式使用 DynamicParameter
吗?
感谢您的帮助:)
您在调用 Dapper 时缺少 commandType: CommandType.StoredProcedure
,因此它将它作为普通文本查询发出,这意味着它仅作为原始命令单独发出 hp_GetLinksByCities
,不传递参数.
注意:我们已经讨论了将单个单词命令自动解释为存储过程,但迄今为止:我们还没有做出这种改变——所以命令类型需要是明确指定。
我正在使用 Dapper DynamicParameters
以便将参数字典从我的 .NET Core 应用程序发送到 SQL 服务器,但我收到错误消息:
Parameter @cityName1 is not provided
但是当我跟踪查询时,我可以看到它存在。
这是代码:
填字典:
Dictionary<string, object> cities = new Dictionary<string, object>();
cities.Add("@cityName1", "New-York");
cities.Add("@cityId1", 123);
对Dapper的调用:
DynamicParameters dbArgs = new DynamicParameters();
foreach (var pair in cities)
{
dbArgs.Add(pair.Key, pair.Value);
}
return await connection.QueryAsync<Provider>(SQL_GET_LINKS_BY_CITIES, dbArgs);
存储过程:
CREATE PROCEDURE [dbo].[hp_GetLinksByCities]
(@cityName1 NVARCHAR(25),
@cityId1 INT)
AS
BEGIN
-- code
END
来自探查器的跟踪:
exec sp_executesql N'[dbo].[hp_GetLinksByCities]',N'@cityName1 nvarchar(4000),@cityId1 int',@cityName1=N'Marseille',@cityId1=1970
错误
原文(法语):
La procédure ou fonction 'hp_GetLinksByCities' attend le paramètre '@cityName1', qui n'a pas été fourni.
翻译成英语:
The stored procedure or function 'hp_GetLinksByCities' is expecting a '@cityName1' parameter which was not supplied
当我在 SSMS 中执行这段代码时,我遇到了同样的错误,但是使用这种语法,它工作正常:
exec [dbo].[hp_sp_GetDirectoryPageLinksByCities] @cityName1=N'Marseille',@cityId1=1970
通常情况下,Dapper 会以这种方式发送订单,而且效果很好。为什么这次的行为有所不同?
我不知道出了什么问题...我需要以不同的方式使用 DynamicParameter
吗?
感谢您的帮助:)
您在调用 Dapper 时缺少 commandType: CommandType.StoredProcedure
,因此它将它作为普通文本查询发出,这意味着它仅作为原始命令单独发出 hp_GetLinksByCities
,不传递参数.
注意:我们已经讨论了将单个单词命令自动解释为存储过程,但迄今为止:我们还没有做出这种改变——所以命令类型需要是明确指定。