在VB.NET中添加Dapper动态输出参数

时间:2015-05-08 16:47:38

标签: vb.net parameters .net-4.0 dapper

我尝试使用Dapper使用VB.NET(和.NET 4.0)调用具有几个输出参数的存储过程。

但是,似乎我无法使用DynamicParameters.Add方法,因为我收到以下编译器错误:

  

'添加'因为有这个名字的多种成员是模棱两可的   存在于课程' Dapper.DynamicParameters'。

...当我尝试写下面一行时:

p.Add("@NewRecordID", DbType:=DbType.Int32, direction:=ParameterDirection.Output)

快速搜索告诉我,当使用具有多个方法的C#库时,有时会发生这种情况,这些方法仅在名称大小写方面有所不同(VB.NET不区分大小写)。搜索DynamicParameters的Dapper源代码确实显示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 as implied here的情况下重写存储过程调用。

1 个答案:

答案 0 :(得分:1)

根据我的意见,以下是所有可能的解决方案:

  1. 重写存储过程以不使用输出参数。 (在这种情况下我能够使用的选项。)
  2. 重写调用存储过程的代码以使用标准ADO.NET。
  3. 重写Dapper以对DynamicParameters.Add使用不同的过载模式。
  4. 更新项目以使用.NET 4.5。
  5. 重新实现IDynamicParameter或可能的子类DynamicParameters