c# - 在生产应用程序中使用 SqlBulkInsert

标签 c# sql database bulkinsert sqlbulkcopy

我们目前正在开发一个应用程序,可以在特定表中为每个用户 session 生成超过 5-10,000 行数据。目前我们正在使用 sql 文本命令一次插入每一行数据,因此保存操作最多可能需要一分钟。我们正在尝试使用 SqlBulkInserts,并且看到时间下降到不到 500 毫秒。有人反对在许多用户将使用该系统的生产应用程序中使用 SqlBulkInserts 吗?

最佳答案

我从来没有遇到过设置了 tableLock 选项的 SqlBulkCopy 问题和另一个用户因此被阻止的问题。 TableLock 选项提高了插入的效率,许多人都在谈论这些,并且只是简单地使用它就向我展示了这一点。

我的典型方法:

public void Bulk(String connectionString, DataTable data, String destinationTable)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        using (SqlBulkCopy bulkCopy =
            new SqlBulkCopy
            (
            connection,
            SqlBulkCopyOptions.TableLock |
            SqlBulkCopyOptions.FireTriggers |
            SqlBulkCopyOptions.UseInternalTransaction,
            null
            ))
        {
            bulkCopy.BatchSize = data.Rows.Count;
            bulkCopy.DestinationTableName = String.Format("[{0}]", destinationTable);
            connection.Open();
            bulkCopy.WriteToServer(data);
        }
    }
}

关于c# - 在生产应用程序中使用 SqlBulkInsert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8762642/

相关文章:

mysql - 如何重新加载数据库表中的数据?

c# - 在 TFS 启用多重 check out 文件

sql - 连接 Int 列

c# - 如何将单个整数值列拆分为 n 列?

sql - 如何让日期时间不插入到表中

数据库系统的JAVA桌面应用程序

c# - MsBuild 任务和属性范围

c# - 以下 LINQ 语句如何工作?

c# - 如何为至少包含四个大写字母的(可能是波兰语的)单词构建正则表达式?

带有 MySQL INSERT 参数的 C#