Dapper动态参数
Dapper dynamic parameter
我正在使用 dapper 和 dynamicParameters 从 Web API 项目 (.NET 5) 中的 SQL 服务器获取数据。
大部分时间都没有问题,但有时会出现以下错误
Procedure or function MySP has too many arguments specified.
我怀疑由于同时请求,参数重复。这个问题有解决办法吗?
string sp = "MySP";
if (ADOFunctions.IsConncetionReadyToOpen(Connection))
{
await Connection.OpenAsync();
}
var queryParameters = new DynamicParameters();
queryParameters.Add("@Date", dateTime.Date);
queryParameters.Add("@ClientRef", clientRef);
queryParameters.Add("@orderRefs", orderRefList);
var countLimitation = await Connection.QueryAsync<UnityExhibitionOrdersInfo>
(sql: sp, param: queryParameters, commandType: System.Data.CommandType.StoredProcedure);
foreach (var item in countLimitation)
{
if (item.Sold > item.Limit)
{
returnVal.Message += $"error ";
returnVal.Result = false;
}
}
首先,需要注意的是,这里不需要DynamicParameters
;一个简单的:
new { dateTime.Date, ClientRef = clientRef, orderRefs = orderRefList }
对于参数来说应该绰绰有余,因为这是一个简单的用法,但是:无论哪种方式,您的 queryParameters
对象都是本地的而不是共享的(这很好)。这 应该 绝对可以正常工作 - 那么我的怀疑是:“Connection
是否以某种方式在同一请求的请求/并发异步流之间共享?” (绝对不能是;ADO.NET 连接不是线程安全的,不适合并发访问)。
我正在使用 dapper 和 dynamicParameters 从 Web API 项目 (.NET 5) 中的 SQL 服务器获取数据。
大部分时间都没有问题,但有时会出现以下错误
Procedure or function MySP has too many arguments specified.
我怀疑由于同时请求,参数重复。这个问题有解决办法吗?
string sp = "MySP";
if (ADOFunctions.IsConncetionReadyToOpen(Connection))
{
await Connection.OpenAsync();
}
var queryParameters = new DynamicParameters();
queryParameters.Add("@Date", dateTime.Date);
queryParameters.Add("@ClientRef", clientRef);
queryParameters.Add("@orderRefs", orderRefList);
var countLimitation = await Connection.QueryAsync<UnityExhibitionOrdersInfo>
(sql: sp, param: queryParameters, commandType: System.Data.CommandType.StoredProcedure);
foreach (var item in countLimitation)
{
if (item.Sold > item.Limit)
{
returnVal.Message += $"error ";
returnVal.Result = false;
}
}
首先,需要注意的是,这里不需要DynamicParameters
;一个简单的:
new { dateTime.Date, ClientRef = clientRef, orderRefs = orderRefList }
对于参数来说应该绰绰有余,因为这是一个简单的用法,但是:无论哪种方式,您的 queryParameters
对象都是本地的而不是共享的(这很好)。这 应该 绝对可以正常工作 - 那么我的怀疑是:“Connection
是否以某种方式在同一请求的请求/并发异步流之间共享?” (绝对不能是;ADO.NET 连接不是线程安全的,不适合并发访问)。