我试图创建一个通用方法,该方法可以在运行时从类中读取参数名称和值,并创建用于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);