【问题标题】:Passing a table as an input parameter to Dapper in .NET Core将表作为输入参数传递给 dotnet 核心中的 dapper
【发布时间】:2017-04-11 09:43:43
【问题描述】:

在尝试通过 Dapper 将表作为参数传递给存储过程时,我遇到了this SO answer,这表明 Dapper 直接支持它。

然而,在 dotnet core 中,DataTable seems not to be implemented,所以这不起作用。

是否有另一种简单的方法可以使用 Dapper 将自定义/用户定义的表作为参数传递给存储过程?

【问题讨论】:

    标签: c# .net-core dapper table-valued-parameters


    【解决方案1】:

    现在,您必须为每个表值类型创建一个实现 SqlMapper.IDynamicParameters 的类。

    修改后的示例(未测试)

    http://todothinkofname.net/2016/05/30/Dapper-with-Net-core/

      public class ParameterTvp : SqlMapper.IDynamicParameters
      {
          private readonly IEnumerable<string> _parameters;
    
          public ParameterTvp(IEnumerable<string> parameters)
          {
              _parameters = parameters;
          }
    
          public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
          {
              var sqlCommand = (SqlCommand) command;
              sqlCommand.CommandType = CommandType.StoredProcedure;
              var items = new List<SqlDataRecord>();
              foreach (var param in _parameters)
              {
                  var rec = new SqlDataRecord(new SqlMetaData("Parameter", SqlDbType.NVarChar, 100));
                  rec.SetString(0, param);
                  items.Add(rec);
              }
    
              var p = sqlCommand.Parameters.Add("@param", SqlDbType.Structured);
              p.Direction = ParameterDirection.Input;
              p.TypeName = "ParameterTableType";
              p.Value = items;
          }
      }
    

    用法

      using (var connection = new SqlConnection(connectionString))
      {
        var parameters = new ParameterTvp(new List<string>() { "XXXXXXXX" });
        connection.Execute("test", parameters);
      }
    

    【讨论】:

    • Here's 堆栈上的另一个示例。
    • 你能把链接资源中的一些示例代码移回这里吗?
    • @VMAtm 我从该链接添加了一个修改后的代码示例。
    【解决方案2】:

    您应该可以传入IEnumerable&lt;SqlDataRecord&gt;like this。它在 System.Data 中,并且未被弃用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多