.net 调用Oracle.DataAccess.Client批量增加数据

  

1、添加引用

using Oracle.DataAccess.Client;

using System.Configuration;

2、代码 增加方法

//DestinationTableName 表名

//connectionString 连接

string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString;

config配置文件中

<add name="DefaultConnectionString" connectionString="Data Source=库名;User ID=用户名;Password=密码;" providerName="System.Data.OracleClient"/>

//dataTable 数据

public void Insert(string DestinationTableName, string connectionString, DataTable dataTable)
        {
            if (dataTable.Rows.Count == 0)
            {
                return;
            }

        //string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString;

        string strMainTableName = "表名";
         // 锁表防止并发产生重复数据 删除数据表已经存在的同一批数据
        string sSQLLock = "lock table  " + strMainTableName + " in share row exclusive mode";
        string strDeleSqlTemp = string.Format("delete from " + strMainTableName + " where ny=‘{0}‘ and dz in ({1})", strDate, strAdd);

        //连接

        using (OracleConnection conn = new OracleConnection(connectionString))
                        {
                            int recordCount = dtTemp.Rows.Count;//数据条数
                            conn.Open();//打开连接
                            OracleTransaction trans = conn.BeginTransaction();//连接打开事务

          try
                            {
                                //锁表
                                OracleCommand cmdLock = new OracleCommand(sSQLLock, conn);
                                cmdLock.ExecuteNonQuery();
                                //删除原有数据
                                OracleCommand cmdDele = new OracleCommand(strDeleSqlTemp, conn);
                                cmdDele.ExecuteNonQuery();

           //获取目标表表结构
                                DataTable DestDataTable = GetOracleTableSchema(strMainTableName);

           //获取insert 语句
                                string strSql = common.GenerateInserSql(strMainTableName, dtTemp, "");
                                OracleCommand cmd = new OracleCommand(strSql, conn);

           //参数赋值
                                common.GenerateParameter(DestDataTable, dtTemp, cmd);
                                cmd.Transaction = trans;
                                cmd.ArrayBindCount = recordCount;
                                cmd.BindByName = true;
                                cmd.ExecuteNonQuery();
                                trans.Commit(); //执行

          }
                            catch (Exception ex)
                            {
                                trans.Rollback();
                                strRetVal = common.CreateXml("0007", "错误信息:" + ex.Message);
                            }
                            finally
                            {
                                conn.Close();
                            }
                        }

}

获取表列的方法GetOracleTableSchema,参数赋值方法GenerateInserSql在博客中详细说明http://www.cnblogs.com/xuxin-1989/p/4157697.html

时间: 2024-08-29 00:01:01

.net 调用Oracle.DataAccess.Client批量增加数据的相关文章

向Oracle中插入记录时,出现“Oracle.DataAccess.Client.OracleException ORA-00933 ”错误

错误信息的弹出框 异常的内容: “Oracle.DataAccess.Client.OracleException”类型的未经处理的异常在 DBFSR.dll 中发生   其他信息: External component has thrown an exception. 捕获的异常信息: Oracle.DataAccess.Client.OracleException ORA-00933: SQL 命令未正确结束    at Oracle.DataAccess.Client.OracleExce

“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。

“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常. 被这个问题困扰了好长时间,终于找到了原因: 原来是本机安装的Oracle客户端版本与服务器不一致. 解决办法: 将以下的dll文件引用即可,dll分为两个版本,Windows7 32位系统亲测,不管安不安装Oracle客户端,都可以使用. 版本一:http://download.csdn.net/detail/zhzhx0318/9120651 版本二:http://downloa

DB字段顺序与类的属性顺序一致:{Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER

{Oracle.DataAccess.Client.OracleException ORA-00932: 数据类型不一致: 应为 TIMESTAMP, 但却获得 NUMBER     应用程序中类型TD_LEARNCARD的属性顺序必须和Oracle字段顺序中一致.

oracle批量增加数据

记工作需要用到的一个批量插入数据的脚本. declare code_ number(10) := 100000; num_ number(10) := 2000000; error_message exception;begin for i in 100 .. 1000 loop num_ := num_ + 1; code_ := code_ + 1; insert into tpj_gf_ma_invoiceinfo values (i, num_, code_,); end loop; c

Oracle.DataAccess.Client.OracleConnection.Open()报错System. NullReferenceException

使用ODAC链接Oracle数据库时,conn.Open()报错:未将对象的实例设置到对象引用. Oracle.DataAccess.dll版本:4.121.2.0 ODAC RELEASE 4 OracleClient版本:Oracle 12c Release 4 方案一(验证可行): (1)服务器安装32-bit ODAC with Oracle Developer Tools for Visual Studio Downloads,下载地址:http://www.oracle.com/te

thinkphp5 模型批量增加数据小记

楼主最近在学习thinkphp5,真的没应广大使用教程所说:你最好就是没学过thinkphp3.2.要不然苦恼重重. 因为想将一些功能实现一次,故自己写了一个文件上传类. 可以实现单文件,多文件上传(文件或者图片). 鉴于thinkphp 5的写法,看文档是新增用$model->save()方法.如果是批量增加的话,就有两种做法: 做法一:$model->saveAll($data); 做法二:$model->isUpdate(false)->save();//循环 官方是这样给出

IIS8无法调用Oracle.DataAccess .dll问题

之前在.net平台下操作Oracle都是用的oracle.dataaccell.dll引用,但是服务器升级为II8后,发布的新服务有关Oracle数据库部分都无法运行,调试了好久发现是IIS8不支持低版本的Oracle.dataAccess.dll文件,需更新为新版本的Oracle.ManagedDataAccess.dll ,下载链接如下:http://pan.baidu.com/s/1kUXElyn

Oracle 逐条和批量插入数据方式对比

创建测试表 create table base_users ( userid         varchar2(16), username  varchar2(32), passwd      varchar2(16) )tablespace cat_data; 采用一条一条插入的方式 create or replace procedure insert_data_one_by_one(n in number) as currentId number(16) := 0; l_userid var

用NHibernate调用Oracle的存储过程

摘要 NHibernate2.1.1版终于可以调用Oracle的存储过程了,不过必须使用NHibernate.Driver.OracleDataClientDriver驱动(Oracle.DataAccess.dll),但这会导致hbm2ddl.keywords抛异常,所以也不是很完美. NHibernate调用Oracle的存储过程的方法 首先,在Oracle10g里面创建一个简单的存储过程,它的第一个参数必须是SYS_REFCURSOR类型的. 存储过程create or replace p