在我们开发过程中,有时会遇到百万级别甚至更多的数据导入。比如我们需要将一百万条数据从csv文件导入到数据库中,此时,如果我们使用普通的 INSERT 语句执行,会非常影响效率,因为每插入一条数据,数据库都需要完整的走一遍 日志啦等等流程。使用bulk insert 会帮助我们提高效率。
我们可以使用 C# 中的 SqlBulkCopy。在这里我提供一个实例供大家参考。我们定义的 vocabularyLookupTable 的字段和类型应该与数据库中的定义一致。
var vocabularyLookupTable = new DataTable(); vocabularyLookupTable.Columns.AddRange( new[] { new DataColumn("VocabularyLookupKey", typeof(Guid)), new DataColumn("CustomerSystemName", typeof(string)), new DataColumn("CustomerTableName", typeof(string)), new DataColumn("CustomerColumnName", typeof(string)), }); var vocabularyLookupRow = vocabularyLookupTable.NewRow(); vocabularyLookupRow["VocabularyLookupKey"] = key; vocabularyLookupRow["CustomerSystemName"] = "MIHMS"; vocabularyLookupRow["CustomerTableName"] = "PUB_CLM_claimpharm"; vocabularyLookupRow["CustomerColumnName"] = "ndckey"; vocabularyLookupTable.Rows.Add(vocabularyLookupRow); var connectionBuilder = new SqlConnectionStringBuilder { DataSource = ".", InitialCatalog = "DatabaseName", IntegratedSecurity = true, Encrypt = false, TrustServerCertificate = true, ConnectTimeout = 100000, }; var sqlConnection = new SqlConnection(connectionBuilder.ToString()); sqlConnection.Open(); var transaction = sqlConnection.BeginTransaction(); var bulkInsertVocabularyLookup = new SqlBulkCopy( sqlConnection, SqlBulkCopyOptions.Default, transaction) { DestinationTableName = "[InterfaceModule].[VocabularyLookup]", BulkCopyTimeout = 100000, }; bulkInsertVocabularyLookup.WriteToServer(vocabularyLookupTable); transaction.Commit();