标签: sqlbulkcopy

SQLBulkCopy不复制主键

使用SQLBulkCopy时,处理主键冲突错误的最佳方法是什么

Violation of PRIMARY KEY constraint 'email_k__'. Cannot insert duplicate key in object  'lntmuser.email'.
Run Code Online (Sandbox Code Playgroud)

(即如果该行已存在于目标表中)?

有没有办法跳过插入重复行或是否必须事先检查和处理?

这是我目前使用的代码:

  var conPro = tx_ProConStr.Text;
  var conArc = tx_ArcConStr.Text;

  var con = new SqlConnection {ConnectionString = conPro};
  var cmd = new SqlCommand("SELECT * FROM dbo.email", con);
  con.Open();

  var rdr = cmd.ExecuteReader(); 
  var sbc = new SqlBulkCopy(conArc) {DestinationTableName = "dbo.email"};

  sbc.WriteToServer(rdr);

  sbc.Close();
  rdr.Close();
  con.Close();
Run Code Online (Sandbox Code Playgroud)

c# sql-server sqlbulkcopy

4
推荐指数
1
解决办法
2628
查看次数

如何在bulkCopy.WriteToServer之后返回结果

根据接受的答案更新:

bool success = false;
using (var bulkCopy = new SqlBulkCopy(connection)) //using!
{
    connection.Open();

    //explicit isolation level is best-practice
    using (var tran = connection.BeginTransaction(IsolationLevel.ReadCommitted))
    {
        bulkCopy.DestinationTableName = "table";
        bulkCopy.ColumnMappings...

        using (var dataReader = new ObjectDataReader<SomeObject>(paths))
        {            
            bulkCopy.WriteToServer(dataReader);
            success = true;
        }

        tran.Commit(); //commit, will not be called if exception escapes
    }
}
return success;
Run Code Online (Sandbox Code Playgroud)

我使用BulkCopy类来进行大插入,效果很好。
执行WriteToServer并将数据保存到数据库后
,我不想知道所有数据是否已成功保存,以便我可以返回,true/false因为我需要保存全部或不保存?

    var bulkCopy = new SqlBulkCopy(connection);

    bulkCopy.DestinationTableName = "table";

    bulkCopy.ColumnMappings...

    using (var dataReader = new ObjectDataReader<SomeObject>(paths))
    { …
Run Code Online (Sandbox Code Playgroud)

c# sql-server sqlbulkcopy sql-server-2008

4
推荐指数
1
解决办法
1万
查看次数

批量 C# 数据表到 postgresql 表

我有一个包含数千条记录的数据表。我有一个具有相同数据表字段的 postgres 表。我想每天截断这个表并再次填充数据表的数据。我见过 sql 批量复制,但它在 postgres 上不可用。那么,哪一种是最有效的方法呢?

  • 每条记录插入一个
  • 多次插入:插入表值(1,1),(1,2),(1,3),(2,1);
  • 从数据表中选择并使用 linq 插入 postgres?不知道...

谢谢。

c# postgresql datatable bulkinsert sqlbulkcopy

4
推荐指数
3
解决办法
2万
查看次数

将 CSV 从 Blob 加载到 Azure SQL Server - 未找到引用的外部数据源

我正在尝试将 Blob 存储中托管的 CSV 批量插入到 Azure SQL Server 中,如MSDN 帖子中所述。

我的代码几乎完全取自这个 Microsoft Github 示例

运行它时,我收到以下错误:

找不到引用的外部数据源“MyAzureBlobStorage”。

-- Create Database Master Key
IF (select Count(*) from sys.symmetric_keys where name like '%DatabaseMasterKey%') = 0
BEGIN
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MYPASSWORD'; 
END

-- Create Storage Credential
IF (select Count(*) from sys.database_credentials where name = 'MyAzureBlobStorageCredential') = 0
BEGIN
print 'Creating credential'
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<secret>';
END …
Run Code Online (Sandbox Code Playgroud)

sql-server csv sqlbulkcopy azure azure-sql-database

4
推荐指数
1
解决办法
4718
查看次数

Guid.NewGuid() 在 Parallel.For 循环中使用时返回重复值

我有一个正在访问 API 的应用程序。因此,它对对象中的所有 ID 进行查询,然后必须对每个 ID 一次查询一个项目。我在 Parallel.For 循环中执行此操作并将每个项目数据添加到数据表中的一行。然后我使用 sqlbulkcopy 将数据表发送到 SQL 服务器表。

如果我在不使用 Parallel.For 的情况下执行此操作,则效果很好。但是,对于 Parallel.For,这一行:

workrow["id"] = Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)

正在生成重复的 Guid。它经常这样做并导致数据无法加载到 SQL 服务器表中,因为 SQL 中的 id 行是主键并且不允许重复。我尝试锁定:

                    lock (lockobject)
                    {
                        workrow["id"] = Guid.NewGuid();
                    }
Run Code Online (Sandbox Code Playgroud)

这没有帮助。
我尝试不为该字段分配一个 id,希望 SQL 会生成它(它在该字段上确实有 newid())。说它不能插入空值失败了。我似乎不能只是从数据表中删除 id 字段,因为当我执行 sqlbulkcopy 时,列不会对齐。

有人可以在这里帮助我吗?我要么需要弄清楚如何让 Guid.NewGuid() 停止生成重复项,要么我需要找出一种不传入 id(始终是数据表中的第一个字段)的方法,以便 SQL 生成 id。

这是我用来生成表之一的代码:

        public static DataTable MakeWorkflowTable()
        {
            DataTable Workflow = new DataTable("Workflow");
            DataColumn id = new DataColumn("id", System.Type.GetType("System.Guid"));
            Workflow.Columns.Add(id);
            DataColumn OrgInfoID = new DataColumn("OrgInfoID", System.Type.GetType("System.Guid"));
            Workflow.Columns.Add(OrgInfoID);
            DataColumn Name = …
Run Code Online (Sandbox Code Playgroud)

c# sql-server multithreading guid sqlbulkcopy

4
推荐指数
1
解决办法
884
查看次数

在SqlBulkCopy之前截断

我想在执行SqlBulkCopy之前截断一个表.在复制数据之前,SqlBulkCopy会自动截断表吗?

.net sql sqlbulkcopy

3
推荐指数
1
解决办法
2615
查看次数

在生产应用程序中使用SqlBulkInsert

我们目前正在开发一个应用程序,它为每个用户会话在特定表中生成超过5-10,000行数据.目前我们使用sql text命令一次插入每行数据,因此保存操作可能需要一分钟.我们正在使用SqlBulkInserts并且已经看到时间下降到不到500ms.有没有人对在许多用户将使用该系统的生产应用程序中使用SqlBulkInserts有任何异议?

c# sql database bulkinsert sqlbulkcopy

3
推荐指数
1
解决办法
4181
查看次数

如何在不定义目标表的情况下使用BulkCopy

所有,

我有以下BulkCopy操作:

// Convert the FlexGrid to a DataTable.
DataTable currData = (DataTable)c1ErrFlexGrid.DataSource;

// Insert the data into the database.
SqlBulkCopy SqlBulkIns = new SqlBulkCopy(strConnString, SqlBulkCopyOptions.Default);
SqlBulkIns.BatchSize = 5000;
SqlBulkIns.DestinationTableName = String.Format("dbo.{0}", strTableName);
SqlBulkIns.WriteToServer(currData);
Run Code Online (Sandbox Code Playgroud)

where strConnectionString是定义的有效连接字符串.当表strTableName存在且字段已定义时,这在过去工作正常.我现在希望在运行时定义的BulkCopy操作上执行此操作DataTable; 也就是说,没有在SQL中预定义表结构.这可能吗?如果是这样,怎么样?

谢谢你的时间.

c# sql datatable sqlbulkcopy

3
推荐指数
1
解决办法
4885
查看次数

我有大约30M行每天在SQL Server中插入更新我有哪些选择?

我有大约30M行每天在SQL Server中插入更新我有哪些选择?

如果我使用SqlBulkCopy,它是否处理不插入已存在的数据?

在我的场景中,我需要能够使用相同的数据一遍又一遍地运行它,而无需复制数据.

目前,我有一个带有update语句的存储过程和一个从DataTable读取数据的insert语句.

我应该寻找什么来获得更好的表现?

c# sqlbulkcopy azure-sql-database

3
推荐指数
1
解决办法
317
查看次数

批量插入在Azure SQL Server中无法正常工作

我无法使用C#webapi将大量数据插入Azure SQL服务器数据库

考虑

我想在SQL中插入60K>数据。在我的本地sql服务器中没有问题,但是在Azure SQL中,它的连接超时

我的方法:(所有人都在本地sql服务器中工作,但不在Azure sql服务器中工作)

1)使用EF对其插入记录进行一次尝试(10000次约10分钟,大多数情况下超时)

2)尝试将批量插入扩展与EF一起使用3)尝试在SqlBulkCopy中

4)尝试增加连接字符串中的连接超时

5)尝试在Dbcontext中增加命令超时。

异常StackTrace

Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 …
Run Code Online (Sandbox Code Playgroud)

c# sqlbulkcopy azure ef-bulkinsert azure-sql-database

3
推荐指数
1
解决办法
1709
查看次数