Oracle的OracleBulkCopy不支持事务处理

在进行OracleBulkCopy批量数据导入的过程中使用事务后抛出了异常,

没使用事务时可以正确批量导入,

ORA-12154:无法解析指定的连接字符串,

但是TNS配置肯定是没有错的,

难道是ConnectionString不是这样写了,执行事务时发生了变化,

还有:

//暂时发现oracle的bulkCopy不支持事务处理

using (OracleBulkCopy bulkCopy = new OracleBulkCopy(conn,OracleBulkCopyOptions.UseInternalTransaction))

如果不支持事务,这个OracleBulkCopyOptions.UseInternalTransaction怎么解释。

  1 private void button2_Click(object sender, EventArgs e)
  2 {
  3 OpenFileDialog afd = new OpenFileDialog();
  4 if (afd.ShowDialog() != System.Windows.Forms.DialogResult.OK)
  5 {
  6 return;
  7 }
  8 string fileName = afd.FileName;
  9 if (Path.GetExtension(fileName) != ".csv")
 10 {
 11 MessageBox.Show("文件名后缀必须是.csv");
 12 return;
 13 }
 14 DataTable table = new DataTable();
 15 using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
 16 using (StreamReader sr = new StreamReader(stream, Encoding.Default))
 17 {
 18 string firstline = sr.ReadLine();
 19 string line;
 20
 21
 22 #region 把创建的列加入表的列集合中
 23 //Id
 24 DataColumn column = new DataColumn();
 25 column.ColumnName = "Id";
 26 column.DataType = System.Type.GetType("System.Int32");
 27 table.Columns.Add(column);
 28 //MobileNumber
 29 column = new DataColumn();
 30 column.ColumnName = "MobileNumber";
 31 column.DataType = System.Type.GetType("System.String");
 32 column.MaxLength = 10;
 33 table.Columns.Add(column);
 34 //MobileArea
 35 column = new DataColumn();
 36 column.ColumnName = "MobileArea";
 37 column.DataType = System.Type.GetType("System.String");
 38 column.MaxLength = 30;
 39 table.Columns.Add(column);
 40 //MobileType
 41 column = new DataColumn();
 42 column.ColumnName = "MobileType";
 43 column.DataType = System.Type.GetType("System.String");
 44 column.MaxLength = 20;
 45 table.Columns.Add(column);
 46 //AreaCode
 47 column = new DataColumn();
 48 column.ColumnName = "AreaCode";
 49 column.DataType = System.Type.GetType("System.String");
 50 column.MaxLength = 10;
 51 table.Columns.Add(column);
 52 //PostCode
 53 column = new DataColumn();
 54 column.ColumnName = "PostCode";
 55 column.DataType = System.Type.GetType("System.String");
 56 column.MaxLength = 8;
 57 table.Columns.Add(column);
 58 #endregion
 59
 60 while ((line = sr.ReadLine()) != null)
 61 {
 62 string[] mobileMsg = line.Split(new char[] { ‘,‘ }, StringSplitOptions.RemoveEmptyEntries);
 63 int Id = Convert.ToInt32(mobileMsg[0]);
 64 string MobileNumber = mobileMsg[1].Trim(‘"‘);
 65 string MobileArea = mobileMsg[2].Trim(‘"‘);
 66 string MobileType = mobileMsg[3].Trim(‘"‘);
 67 string AreaCode = mobileMsg[4].Trim(‘"‘);
 68 string PostCode = mobileMsg[5].Trim(‘"‘);
 69 //创建行,把行加入表的行集合中
 70 DataRow row = table.NewRow();
 71 row["Id"] = Id;
 72 row["MobileNumber"] = MobileNumber;
 73 row["MobileArea"] = MobileArea;
 74 row["MobileType"] = MobileType;
 75 row["AreaCode"] = AreaCode;
 76 row["PostCode"] = PostCode;
 77 table.Rows.Add(row);
 78 }
 79 }
 80
 81 int i = table.Rows.Count;
 82 Stopwatch sw = new Stopwatch();
 83 sw.Start();
 84 using (OracleConnection conn = new OracleConnection())//连接
 85 {
 86 conn.ConnectionString = @"Data Source=(DESCRIPTION =
 87 (ADDRESS_LIST =
 88 (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.117)(PORT = 1521))
 89 )
 90 (CONNECT_DATA =
 91 (SERVER = DEDICATED)
 92 (SERVICE_NAME = orcl.192.168.1.117)
 93 ))
 94 );User Id=scott;Password=abcd5226584;";
 95 conn.Open();
 96 using (OracleTransaction tx = conn.BeginTransaction())//启动事务
 97 using (OracleBulkCopy bulkCopy = new OracleBulkCopy(conn,OracleBulkCopyOptions.UseInternalTransaction))
 98 {
 99 bulkCopy.DestinationTableName = "T_MOBILE";
100 foreach (DataColumn column in table.Columns)
101 {
102 bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);//源列名->目标列名
103 }
104 try //如果发生异常就回滚
105 {
106 bulkCopy.WriteToServer(table);//把table表写入数据库表中
107 tx.Commit();
108 }
109 catch (Exception ex)
110 {
111 tx.Rollback();
112 throw new Exception(ex.Message);
113 }
114 }
115 sw.Stop();
116 MessageBox.Show("耗时:" + sw.ElapsedMilliseconds + "秒");
117 }
118 }
119 }

错误代码:OracleBulkCopy进行事务处理的

时间: 2024-11-08 12:34:49

Oracle的OracleBulkCopy不支持事务处理的相关文章

Oracle 11g 的官方支持周期和时限

Oracle公司对于自身产品的支持策略大多数人很难搞清楚,对于Oracle Database 11g的支持周期,有很多朋友产生了异议,参考下文提到的一些文件,希望可以帮助大家理解Oracle的产品支持策略. 在MOS支持站点中Note 742060.1记录了详细的信息,下图清晰的标识了Oracle数据库产品当前的支持策略和周期. 注意图示中红色代表版本序列,ES为扩展支持期,有免费期和付费期(但是前提是必须有买基本服务才能进入扩展支持期),绿色代表小版本Patch信息,而每个Patch的终点即是

Oracle EBS-SQL (OM-5):检查订单事务处理类型.sql

SELECT            HO.NAME OU                                                                           名称,           t.NAME                                                                   订单事务处理类型,           t.DESCRIPTION                           

【Oracle】ORACLE SQL Developer不支持JAVA版本

ORACLE SQL Developer不支持JAVA版本 今天我打开 ORACLE SQL Developer准备开始练手.没有想到却给出了错误提示. 我 是安装了java JDK的而且是1.6版本的.我可能选择了bin目录下面的java.exe文件,原本觉得这样的操作应该是没有问题的结果还是出现了错误.具体错误信息如 下:不支持的java版本,不支持java 6.0发行版本1.6.0_xxx,请升级到java 6.0发行版本1.6.0_04.或者降级到java 5.0发行版本1.5.0或更高

【Spring】Spring系列5之Spring支持事务处理

5.Spring支持事务处理 5.1.事务准备 以上代码结构与AOP的前置通知.返回通知.异常通知.后置通知一样. 5.2.声明式事务 5.2.1.基于注解 5.2.2.基于配置文件 5. 3.事务传播属性 5.4.事务其他属性 5.4.1.事务的隔离级别 5.4.2.事物的回滚属性 5.4.3.超时与只读属性 5.5.使用xml文件配置事务

MySQL不支持事务处理的解决方法

MySQL不支持事务处理的解决方法 2014年07月07日23:20    百科369 MySQL不支持事务处理的解决方法 MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理. 在MySQL中,只有InnoDB存储引擎类型的数据表才能支持事务处理. 因此,如果想让MySQL支持事务处理,只要将数据表修改为InnoDB存储引擎类型即可.操作步骤如下: 1. 进入到phpMyAdmin主界面,在导航面板中选择要转换为InnoDB存储引擎类型的数据库,例如选择db_xue

专业Oracle数据库恢复技术支持

数据库作为企业的核心,如果数据库因损坏无法正常运行,导致数据丢失,将给企业带来无法挽回的经济损坏.当您的数据库出现故障,又没有有效的备份之时,我们就是您的最后一道防线,尽最大可能帮您挽救数据库,减少损失.我们有几百套Oracle数据库恢复经历:版本从ORACLE 7.3.ORACLE 8/8I,ORACLE 9I.ORACLE 10G,ORACLE 11G和ORACLE 12C:平台有Linux.Windows.AIX.HP-UNIX.SOLARIS等:客户从西藏到海南,从黑龙江到贵州遍布中国所

[转帖]Oracle 数据库官方不支持VMWare

Oracle 数据库官方不支持VMWare [日期:2014-05-13] 来源:Linux社区  作者:myhuaer [字体:大 中 小] https://www.linuxidc.com/Linux/2014-05/101669.htm 原来很早之前就 明确说明不支持了.. 最近oracle跟MS合作了 共同对账 AWS+VMware 请注意,Oracle 在官方Support 网站上明确提出不支持VMWare 运行Oracle database. 但如果在虚拟环境要怎么办呢? 我的建议:

Oracle与Mysql数据的事务处理机制

相比oracle的事务处理,Mydql相对还是简单一点的,但是事务作为一项重要的安全机制在数据库里面是必不可少的,特别是里面的事务回滚机制非常的有用,不多说了,先说一下mysql的事务处理: Mysql简单的回滚: 第一步:开始事务:start transaction; 第二步:执行dml等其他的变化操作. 第三步:混滚到开始事务之前状态: rollback; 这样的话在执行完毕之后就发现之前的一些操作没有执行成功.只有commit提交之后才会真正的把数据提交.但是,还要考虑下面的两种情况,一种

Oracle rac 是不支持一个节点是rhel5.x ,另一个节点是rhel6.x的

因为rhel5.x 和rhel 6.x  在oracle看来,是"different operating system versions" oracle 解决sr的工程师给的答复全文如下: There shouldn't be any problem in installing RAC with different patch bundle as long as they are meeting with minimum requirement. Oracle does not sup