在VB.NET中添加简洁的动态输出参数

在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) 快

我正在尝试使用VB.NET(和.NET4.0)使用Dapper调用一个具有两个输出参数的存储过程

但是,我似乎无法使用
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的情况下重新编写存储过程调用。

据我所知,以下都是可能的解决方案:

  • 重写存储过程以不使用输出参数。(我在本例中可以使用的选项。)
  • 重写调用存储过程的代码以使用标准ADO.NET
  • 重写Dapper以对
    动态参数使用不同的重载模式。添加
  • 更新项目以使用.NET 4.5
  • 重新实现IDynamicParameters或可能的子类DynamicParameters

  • 我怀疑这种模糊性涉及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?好主意,添加到列表中。