在VB.NET中添加简洁的动态输出参数
我正在尝试使用VB.NET(和.NET4.0)使用Dapper调用一个具有两个输出参数的存储过程 但是,我似乎无法使用在VB.NET中添加简洁的动态输出参数,vb.net,parameters,.net-4.0,dapper,Vb.net,Parameters,.net 4.0,Dapper,我正在尝试使用VB.NET(和.NET4.0)使用Dapper调用一个具有两个输出参数的存储过程 但是,我似乎无法使用DynamicParameters.Add方法,因为我遇到以下编译器错误: “Add”不明确,因为有多种类型的成员使用此名称 存在于类“Dapper.DynamicParameters”中 …当我试着写下一行时: p.Add("@NewRecordID", DbType:=DbType.Int32, direction:=ParameterDirection.Output) 快
DynamicParameters.Add
方法,因为我遇到以下编译器错误:
“Add”不明确,因为有多种类型的成员使用此名称
存在于类“Dapper.DynamicParameters”中
…当我试着写下一行时:
p.Add("@NewRecordID", DbType:=DbType.Int32, direction:=ParameterDirection.Output)
快速搜索告诉我,当使用一个C#库时,有时会发生这种情况,该库有多个只在名称大小写上不同的方法(VB.NET不区分大小写)。在简洁的源代码中搜索DynamicParameters
确实会显示Add
方法的以下两个重载,但它们都使用相同的大小写,编译器应该能够区分这两个重载
public void Add(string name, object value, DbType? dbType, ParameterDirection? direction, int? size)
public void Add(string name, object value = null, DbType? dbType = null, ParameterDirection? direction = null, int? size = null, byte? precision = null, byte? scale = null)
(我还尝试在调用中添加scale:=Nothing
,以强制第二次重载,但没有效果。)
虽然我可以通过将匿名对象传递给DynamicParameters
构造函数来处理输入参数,但在添加输出参数时,我找不到解决方法
我已经检查了项目引用,以确保没有多个或不明确的程序集引用
以前是否有人遇到过此问题,并找到了解决方法
目前,我能想到的唯一选择是在不使用Dapper的情况下重新编写存储过程调用。据我所知,以下都是可能的解决方案:
动态参数使用不同的重载模式。添加
我怀疑这种模糊性涉及Add方法中的可选参数,这意味着唯一的解决方案是更改Dapper方法的签名。噢,这太糟糕了。不幸的是,上面的双重载是典型的在v2 api中添加可选参数的方法,它使旧调用具有所有非可选参数。您可以尝试
p.Add(“@NewRecordID”,Nothing,DbType.Int32,ParameterDirection.Output,Nothing)
?尝试过了,结果相同,即使我尝试了p.Add(@NewRecordID)”,Nothing,DbType.Int32,ParameterDirection.Output,Nothing,Nothing,Nothing)
。我可以大喊大叫“诅咒你VB!!!”?5。重新实现IDynamicParameters或可能的子类DynamicParameters?好主意,添加到列表中。