Tag: sqlbulkcopy

如何在使用SqlBulkCopy时检索服务器生成的标识值

我知道我可以通过不指定此处提到的SqlBulkCopyOptions.KeepIdentity来使用标识列批量插入到我的表中。 我希望能够获得服务器生成的标识值并将它们放在我的数据表中,甚至是列表中。 我看到这篇文章,但我希望我的代码是通用的,我的所有表中都没有版本列。 任何建议都非常感谢。 这是我的代码: public void BulkInsert(DataTable dataTable, string DestinationTbl, int batchSize) { // Get the DataTable DataTable dtInsertRows = dataTable; using (SqlBulkCopy sbc = new SqlBulkCopy(sConnectStr)) { sbc.DestinationTableName = DestinationTbl; // Number of records to be processed in one go sbc.BatchSize = batchSize; // Add your column mappings here foreach (DataColumn dCol in […]

使用SqlBulkCopy插入数据时出错

我正在尝试使用SqlBulkCopy批量插入数据到SQL 2008。 这是我的表: IF OBJECT_ID(N’statement’, N’U’) IS NOT NULL DROP TABLE [statement] GO CREATE TABLE [statement]( [ID] INT IDENTITY(1, 1) NOT NULL, [date] DATE NOT NULL DEFAULT GETDATE(), [amount] DECIMAL(14,2) NOT NULL, CONSTRAINT [PK_statement] PRIMARY KEY CLUSTERED ( [ID] ASC ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS […]

C#优化:在数据库中插入2亿行

我有以下(简化)代码,我想优化速度: long inputLen = 50000000; // 50 million DataTable dataTable = new DataTable(); DataRow dataRow; object[] objectRow; while (inputLen–) { objectRow[0] = … objectRow[1] = … objectRow[2] = … // Generate output for this input output = … for (int i = 0; i < outputLen; i++) // outputLen can range from 1 to 20,000 […]

SqlBulkCopy性能

我正在努力提高批量负载的性能; 100多万条记录+每日。 我把它移到了使用IDatareader接口来代替数据表,并且确实获得了显着的性能提升(每分钟500,000条记录)。 目前的设置是: 用于解析分隔文件的自定义缓存读取器。 将流读取器包装在缓冲流中。 一个自定义对象读取器类,它枚举对象并实现IDatareader接口。 然后SqlBulkCopy写入服务器 大部分性能瓶颈直接在SqlBulkCopy.WriteToServer 。 如果我对该过程进行unit testing,但仅排除WriteToServer该过程大约在1分钟内返回。 WriteToServer还需要15分钟+。 对于unit testing,它位于我的本地计算机上,因此数据库存在相同的驱动器,因此不必通过网络复制数据。 我正在使用堆表(没有索引;聚集或非聚集;我已经玩过各种批量大小而没有性能上的重大差异)。 有必要减少加载时间,所以我希望有人可能现在可以从这个开局中挤出更多的血液。

使用SqlBulkCopy为每个插入的行触发触发器

我正在使用SqlBulkCopy类在表tbl_records一次插入50k行我在此表上设置了After Insert触发器并使用以下代码 SqlBulkCopy SqlBc1 = new SqlBulkCopy(strConnString, SqlBulkCopyOptions.FireTriggers); // Set DataReader For SqlBulkCopy sqlComm = new SqlCommand(strQuery, sqlTemCon); sqlComm.CommandTimeout = 3600000; sqlComm.CommandType = System.Data.CommandType.Text; SqlDataReader dReader = sqlComm.ExecuteReader(); SqlBc1.WriteToServer(dReader); 但执行前后。 它仅触发50k插入的First行触发器 我想它应该为每一行开火。 我怎样才能做到这一点??

当源DataTable行具有DBNull.Value时,SqlBulkCopy进入表,默认列值失败

更新: 这是我的解决方案 我有一个表定义为: CREATE TABLE [dbo].[csvrf_References] ( [Ident] [int] IDENTITY(1,1) NOT NULL, [ReferenceID] [uniqueidentifier] NOT NULL DEFAULT (newsequentialid()), [Type] [nvarchar](255) NOT NULL, [Location] [nvarchar](1000) NULL, [Description] [nvarchar](2000) NULL, [CreatedOn] [datetime] NOT NULL DEFAULT (getdate()), [LastUpdatedOn] [datetime] NOT NULL DEFAULT (getdate()), [LastUpdatedUser] [nvarchar](100) NOT NULL DEFAULT (suser_sname()), CONSTRAINT [PK_References] PRIMARY KEY NONCLUSTERED ([ReferenceID] ASC) ) ON […]

如何在SQL BULK COPY中获取Identity值?

我必须从SQLBULKCOPY之后的表中获取IDENTITY值到同一个表。 数据量可能是数千条记录。 有人可以帮我解决这个问题吗?

回滚批量复制

我有一个应用程序,通过c#中的批量复制类从我的数据库中复制。 发生exception时,我可以在sql server中回滚批量复制操作吗?

使用C#在SQL Server上的临时表中插入3万行的最快方法

我试图找出如何使用c#在SQL Server的临时表中提高插入性能。 有些人说我应该使用SQLBulkCopy但是我必须做错了,因为它似乎比简单地构建一个SQL插入字符串慢得多。 我使用SQLBulkCopy创建表的代码如下: public void MakeTable(string tableName, List ids, SqlConnection connection) { SqlCommand cmd = new SqlCommand(“CREATE TABLE ##” + tableName + ” (ID int)”, connection); cmd.ExecuteNonQuery(); DataTable localTempTable = new DataTable(tableName); DataColumn id = new DataColumn(); id.DataType = System.Type.GetType(“System.Int32”); id.ColumnName = “ID”; localTempTable.Columns.Add(id); foreach (var item in ids) { DataRow row = localTempTable.NewRow(); […]

SqlBulkCopy无效

我有一个从Excel表填充的DataSet 。 我想在LeadId为PK的Lead_Hdr表中使用SQLBulk Copy来插入记录。 执行下面的代码时出现以下错误: 给定的ColumnMapping与源或目标中的任何列都不匹配 string ConStr=ConfigurationManager.ConnectionStrings[“ConStr”].ToString(); using (SqlBulkCopy s = new SqlBulkCopy(ConStr,SqlBulkCopyOptions.KeepIdentity)) { if (MySql.State==ConnectionState.Closed) { MySql.Open(); } s.DestinationTableName = “PCRM_Lead_Hdr”; s.NotifyAfter = 10000; #region Comment s.ColumnMappings.Clear(); #region ColumnMapping s.ColumnMappings.Add(“ClientID”, “ClientID”); s.ColumnMappings.Add(“LeadID”, “LeadID”); s.ColumnMappings.Add(“Company_Name”, “Company_Name”); s.ColumnMappings.Add(“Website”, “Website”); s.ColumnMappings.Add(“EmployeeCount”, “EmployeeCount”); s.ColumnMappings.Add(“Revenue”, “Revenue”); s.ColumnMappings.Add(“Address”, “Address”); s.ColumnMappings.Add(“City”, “City”); s.ColumnMappings.Add(“State”, “State”); s.ColumnMappings.Add(“ZipCode”, “ZipCode”); s.ColumnMappings.Add(“CountryId”, “CountryId”); s.ColumnMappings.Add(“Phone”, “Phone”); […]