我试图创建一个通用方法,该方法可以在运行时从类中读取参数名称和值,并创建用于Dapper查询执行的参数集合。意识到直到所有参数都是输入类型为止,它都能很好地工作,但是如果我必须添加Output / ReturnValue类型参数,那么我需要使用DynamicParameters,否则我无法获取Output / ReturnValue参数的值

SP具有以下参数:

PersonList - TableValued - Input
TestOutput - Int - Output

我无法使以下代码起作用:
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("PersonList", <DataTable PersonList>);
dynamicParameters.Add("TestOutput", 0, Dbtype.Int32, ParameterDirection.Output);

异常(exception)是:



据我了解,问题是没有有效的DbType可用于将TVP添加到动态参数中,因为我没有使用SqlDbType,因此DbType中没有替代SqlDbType.Structured的方法。

解决问题的任何指针或解决方法

最佳答案

首先在数据库中创建用户定义表类型

CREATE TYPE udtt_PersonList AS TABLE
(
    ...
)
GO

在你的代码中
var dynamicParameters = new DynamicParameters();
dynamicParameters.Add("@PersonList", PersonList.AsTableValuedParameter("[dbo].[udtt_PersonList]"));
dynamicParameters.Add("TestOutput", 0, Dbtype.Int32, ParameterDirection.Output);

09-26 08:02