zoukankan      html  css  js  c++  java
  • C# OracleBulkCopy 批量插入oracle数据库的方法

    只有安装了oracle 11G客户端的机器上才可以用,要用到ODP.NET组件中的oracleDataAccess.DLL,命名空间引用为Oracle.DataAccess.Client;

    引用:Oracle.DataAccess.Client.OracleBulkCopy

     官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html

     官方下载地址(ODP.net):http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html

    #region 批量插入数据
            /// <summary>
            /// 批量插入数据
            /// </summary>
            /// <param name="dt">要插入的数据</param>
            /// <param name="targetTable">数据库中的表</param>
            public static void BulkToDB(DataTable dt, string targetTable)
            {
                OracleConnection conn = new OracleConnection(connOrcleString);
                OracleBulkCopy bulkCopy = new OracleBulkCopy(connOrcleString, OracleBulkCopyOptions.UseInternalTransaction);   //用其它源的数据有效批量加载Oracle表中
                //conn.BeginTransaction();
                //OracleBulkCopy bulkCopy = new OracleBulkCopy(connOrcleString, OracleBulkCopyOptions.Default);
                bulkCopy.BatchSize = 100000;
                bulkCopy.BulkCopyTimeout = 260;
                bulkCopy.DestinationTableName = targetTable;    //服务器上目标表的名称
                bulkCopy.BatchSize = dt.Rows.Count;   //每一批次中的行数
                try
                {
                    conn.Open();
                    if (dt != null && dt.Rows.Count != 0)
                       
                        bulkCopy.WriteToServer(dt);   //将提供的数据源中的所有行复制到目标表中
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    conn.Close();
                    if (bulkCopy != null)
                        bulkCopy.Close();
                }
            }
            #endregion

    注意事项:

    OracleBulkCopy Class in Oracle.ManagedDataAccess.dll?

     论坛地址:https://stackoverflow.com/questions/26941161/oraclebulkcopy-class-in-oracle-manageddataaccess-dll

    ------------------------------------------------------------------------------------------------------------------------

    Oracle.ManagedDataAccess.dll 中没有 OracleBulkCopy此方法,请注意!!!!!!

    ------------------------------------------------------------------------------------------------------------------------

    问:

    我使用OracleBulkCopy类引用Oracle.DataAccess.dll。我想使用Oracle.ManagedDataAccess。dll,便于部署。但是后来我犯了一个错误"没有找到"OracleBulkCopy "

    有人知道为什么OracleBulkCopy不包含在Oracle.ManagedDataAccess.dll中吗?

    ------------------------------------------------------------------------------------------------------------------------

    答:

    在此期间,ODP不支持编写OracleBulkCopy。净,司机管理。

    原因是不包括只是一个特性优先的问题。当托管驱动程序变得更加完整,最终将添加OracleBulkCopy类。

    在未来,任何人都可以看到“ODP之间的差异”。NET托管驱动程序和非托管驱动程序“最近ODP的一部分”。NET book查看不支持的内容:

    https://docs.oracle.com/cd/E56485_01/win.121/e55744/intro004.htm#ODPNT8146

    答:

    https://apex.oracle.com/pls/apex/f?p=18357:39:28710406382793::NO::P39_ID:27881

    如果我们获得足够的选票,他们可能会实施。

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Oracle.DataAccess.dll 部署安装

     

     Oracle.DataAccess.dll 要拷贝到项目发布目录

    项目发布的时候,还必须要拷贝以下几个文件在运行目录
    1、oci.dll 
    2、oraociicus11.dll 
    3、OraOps11w.dll 
    4、oraons.dll

    在开发机器上看了Oracle.DataAccess.dll 版本是2.112.1.2 ,测试服务器上的是2.112.1.0。杯具。。。找到原因了,两个版本号不一致。而且发现客户机上无64位的Oracle.DataAccess.dll.

    IIS中只能开始32位应用程序支持。赶紧找解决办法:

    解决办法就是在web.config中修改,在configSections节点结束之后增加如下内容:

    <runtime> 
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
            <dependentAssembly> 
                <assemblyIdentity name="Oracle.DataAccess" 
                publicKeyToken="89B483F429C47342" 
                culture="neutral" /> 
                <bindingRedirect 
                  oldVersion="2.112.1.2" 
                  newVersion="2.112.1.0"/> 
            </dependentAssembly> 
        </assemblyBinding> 
    </runtime>

  • 相关阅读:
    Riverside Curio
    bzoj1010 [HNOI2008]玩具装箱toy
    bzoj1898 [Zjoi2005]Swamp 沼泽鳄鱼
    hdu 5435 A serious math problem
    poj2411 Mondriaan's Dream
    bzoj3450 Tyvj1952 Easy
    关于欧拉函数与莫比乌斯函数等一系列积性函数的线性筛
    NOIP后一波总结
    回忆一下电子科技大学春令营
    【算法】背包九讲
  • 原文地址:https://www.cnblogs.com/zouhao/p/9000293.html
Copyright © 2011-2022 走看看