C# 以简洁的方式插入多行

C# 以简洁的方式插入多行,c#,.net,ado.net,dapper,sqlconnection,C#,.net,Ado.net,Dapper,Sqlconnection,使用Dapper将多行插入SQL Server的最佳解决方案是什么? 当我有大约8k条记录时,我的数据库连接超时并失败 在最后阶段的应用程序中,我得到了一个表列表,其中每个表都有一个行列表 我要做的是在每个表上创建事务和foreatch,然后在每行和conn.CreateCommand上进行foreatch,填充参数和executeNonQuery。所以,如果我有9k条记录,我实际上是在做9k ExecuteOnQuery操作 我有更好的选择吗?同意DaniCE的观点,SqlBulkCopy是一

使用Dapper将多行插入SQL Server的最佳解决方案是什么? 当我有大约8k条记录时,我的数据库连接超时并失败

在最后阶段的应用程序中,我得到了一个表列表,其中每个表都有一个行列表

我要做的是在每个表上创建事务和foreatch,然后在每行和conn.CreateCommand上进行foreatch,填充参数和executeNonQuery。所以,如果我有9k条记录,我实际上是在做9k ExecuteOnQuery操作


我有更好的选择吗?

同意DaniCE的观点,SqlBulkCopy是一个不错的选择。最近我遇到过这样的情况,我用dapper处理了大部分数据,但数据量更大,在我的案例中有数百万条记录,dapper曾经不是我最好的朋友

    private void BulkCopy(SqlConnection sqlConnection,string tableName, DataTable dataTable)
    {
        using (var bulkCopy = new SqlBulkCopy(sqlConnection))
        {
            bulkCopy.DestinationTableName = tableName;
            bulkCopy.BatchSize = 50000;
            bulkCopy.BulkCopyTimeout = 60; //seconds

            bulkCopy.WriteToServer(dataTable);
        }
    }

最好的免费方式无疑是@JFM和@DaniCE建议的
SqlBulkCopy


免责声明:我是项目的所有者

此库不是免费的,但可轻松支持以下操作:

  • 隔板
  • 批量更新
  • 批量删除
  • 大合并
  • 批量同步
通过使用映射并允许像标识列一样输出值

// CONFIGURE & MAP entity
DapperPlusManager.Entity<Order>()
                 .Table("Orders")
                 .Identity(x => x.ID);

// CHAIN & SAVE entity
connection.BulkInsert(orders)
          .AlsoInsert(order => order.Items);
          .Include(x => x.ThenMerge(order => order.Invoice)
                         .AlsoMerge(invoice => invoice.Items))
          .AlsoMerge(x => x.ShippingAddress);   
//配置和映射实体
DapperPlusManager.Entity()
.表格(“订单”)
.Identity(x=>x.ID);
//链和保存实体
连接.批量插入(订单)
.AlsoInsert(订单=>order.Items);
.Include(x=>x.ThenMerge(订单=>order.Invoice)
.AlsoMerge(发票=>invoice.Items))
.AlsoMerge(x=>x.ShippingAddress);

我将调查使用SqlBulkCopy和dapper。也许这个引用可以帮助您:,谢谢,从来没有听说过大容量插入和SqlBuklCopy类。在你发完帖子后,我对这个话题做了一些研究,这正是我需要的!!再次感谢!!connection.BulkInsert(models).AlsoBulkInsert(model=>model.SelectMany(c=>c.Variables));如果您注意到AlsoBulkInsert是一个列表,那么在您的示例中它不是。我是否缺少使用语句?