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项的勾选。