使用OracleBulkCopy批量插入数据

 vs2017运行于64位win10环境下。

一.下载并安装ODAC 11.2 Release 5 and Oracle Developer Tools for Visual Studio (11.2.0.3.20)

下载地址为:https://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html。

下载后得到ODTwithODAC1120320_32bit.zip   文件,大小为229 MB,压缩并安装。在安装中默认的基目录为“d:\app",标识性不强,容易被误删,所以应自定义基目录。

二.在项目中引用Oracle.DataAccess.dll。引用的文件如下:

D:\app\tech\product\11.2.0\client_1\odp.net\bin\4\Oracle.DataAccess.dll

三.代码

主要语句如下:

    OracleBulkCopy bulkCopy = new OracleBulkCopy(conn, OracleBulkCopyOptions.Default);
   bulkCopy.BatchSize = 100000;
   bulkCopy.BulkCopyTimeout = 260;
    bulkCopy.DestinationTableName = targetTable;
    bulkCopy.WriteToServer(dt);
    if (bulkCopy != null)
    bulkCopy.Close();
 

四、错误处理

在批量插入时,经常会出错中断,提示信息为:

已引发异常:托管调试助手 "ContextSwitchDeadlock":“CLR 无法从 COM 上下文 0x1594c80 转换为 COM 上下文 0x1594bc8,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。”

处理方式为,在vs中,依次点击主菜单调试->窗口->异常设置打开异常设置窗口,在其中展开managed debugging assistants项,取消contextSwitchDeadlock项的勾选。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Oracle.ManagedDataAccess 客户端提供的 OracleBulkCopy 类来实现批量插入多行数据Oracle 数据库。 以下是一个示例代码: ```csharp using Oracle.ManagedDataAccess.Client; // 数据库连接字符串 string connectionString = "Data Source=<hostname>/<service_name>;User ID=<username>;Password=<password>"; // 创建一个 DataTable 对象并填充数据 DataTable dataTable = new DataTable(); dataTable.Columns.Add("Column1", typeof(int)); dataTable.Columns.Add("Column2", typeof(string)); dataTable.Rows.Add(1, "Row 1"); dataTable.Rows.Add(2, "Row 2"); dataTable.Rows.Add(3, "Row 3"); // 创建一个 OracleConnection 对象 using (OracleConnection connection = new OracleConnection(connectionString)) { // 打开数据库连接 connection.Open(); // 创建一个 OracleBulkCopy 对象 using (OracleBulkCopy bulkCopy = new OracleBulkCopy(connection)) { // 设置目标表的名称 bulkCopy.DestinationTableName = "Table1"; // 设置列映射关系 bulkCopy.ColumnMappings.Add("Column1", "Column1"); bulkCopy.ColumnMappings.Add("Column2", "Column2"); // 批量插入数据 bulkCopy.WriteToServer(dataTable); } } ``` 在上面的示例代码中,首先创建了一个 DataTable 对象并填充了数据。然后创建了一个 OracleConnection 对象并打开了数据库连接。最后创建了一个 OracleBulkCopy 对象并设置了目标表的名称和列映射关系,最后调用 WriteToServer 方法批量插入数据数据库中。注意,OracleBulkCopy 对象只能用于插入数据,不能用于更新或删除数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值