1

我正在使用 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;
    }
}
4

1 回答 1

2

首先,应该注意的是,您甚至不需要 DynamicParameters这里;一个简单的:

new { dateTime.Date, ClientRef = clientRef, orderRefs = orderRefList }

对于参数来说应该绰绰有余,因为这是一个简单的用法,但是:无论哪种方式,您的queryParameters对象都是本地的而不是共享的(这很好)。这应该工作得很好——然后,我的怀疑是:“Connection在同一请求上的请求/并发异步流之间以某种方式共享?” (绝对不能这样;ADO.NET 连接不是线程安全的,也不适合并发访问)。

于 2021-04-12T06:48:30.330 回答