问题描述
我正在使用 dapper 和 dynamicParameters 从 Web API 项目 (.NET 5) 中的 sql Server 获取数据。
它大部分时间都可以正常工作,但有时会出现以下错误
过程或函数 MySP 指定的参数过多。
我怀疑由于同时请求,参数重复。这个问题有解决办法吗?
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 连接不是线程安全的,也不适用于并发访问)。