Oracle的OracleBulkCopy不支持事务处理
在进行OracleBulkCopy批量数据导入的过程中使用事务后抛出了异常,
没使用事务时可以正确批量导入,
ORA-12154:无法解析指定的连接字符串,
但是TNS配置肯定是没有错的,
难道是ConnectionString不是这样写了,执行事务时发生了变化,
还有:
//暂时发现oracle的bulkCopy不支持事务处理
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(conn,OracleBulkCopyOptions.UseInternalTransaction))
如果不支持事务,这个OracleBulkCopyOptions.UseInternalTransaction怎么解释。
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog afd = new OpenFileDialog();
if (afd.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
return;
}
string fileName = afd.FileName;
if (Path.GetExtension(fileName) != ".csv")
{
MessageBox.Show("文件名后缀必须是.csv");
return;
}
DataTable table = new DataTable();
using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
using (StreamReader sr = new StreamReader(stream, Encoding.Default))
{
string firstline = sr.ReadLine();
string line; #region 把创建的列加入表的列集合中
//Id
DataColumn column = new DataColumn();
column.ColumnName = "Id";
column.DataType = System.Type.GetType("System.Int32");
table.Columns.Add(column);
//MobileNumber
column = new DataColumn();
column.ColumnName = "MobileNumber";
column.DataType = System.Type.GetType("System.String");
column.MaxLength = ;
table.Columns.Add(column);
//MobileArea
column = new DataColumn();
column.ColumnName = "MobileArea";
column.DataType = System.Type.GetType("System.String");
column.MaxLength = ;
table.Columns.Add(column);
//MobileType
column = new DataColumn();
column.ColumnName = "MobileType";
column.DataType = System.Type.GetType("System.String");
column.MaxLength = ;
table.Columns.Add(column);
//AreaCode
column = new DataColumn();
column.ColumnName = "AreaCode";
column.DataType = System.Type.GetType("System.String");
column.MaxLength = ;
table.Columns.Add(column);
//PostCode
column = new DataColumn();
column.ColumnName = "PostCode";
column.DataType = System.Type.GetType("System.String");
column.MaxLength = ;
table.Columns.Add(column);
#endregion while ((line = sr.ReadLine()) != null)
{
string[] mobileMsg = line.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
int Id = Convert.ToInt32(mobileMsg[]);
string MobileNumber = mobileMsg[].Trim('"');
string MobileArea = mobileMsg[].Trim('"');
string MobileType = mobileMsg[].Trim('"');
string AreaCode = mobileMsg[].Trim('"');
string PostCode = mobileMsg[].Trim('"');
//创建行,把行加入表的行集合中
DataRow row = table.NewRow();
row["Id"] = Id;
row["MobileNumber"] = MobileNumber;
row["MobileArea"] = MobileArea;
row["MobileType"] = MobileType;
row["AreaCode"] = AreaCode;
row["PostCode"] = PostCode;
table.Rows.Add(row);
}
} int i = table.Rows.Count;
Stopwatch sw = new Stopwatch();
sw.Start();
using (OracleConnection conn = new OracleConnection())//连接
{
conn.ConnectionString = @"Data Source=(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.117)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.192.168.1.117)
))
);User Id=scott;Password=abcd5226584;";
conn.Open();
using (OracleTransaction tx = conn.BeginTransaction())//启动事务
using (OracleBulkCopy bulkCopy = new OracleBulkCopy(conn,OracleBulkCopyOptions.UseInternalTransaction))
{
bulkCopy.DestinationTableName = "T_MOBILE";
foreach (DataColumn column in table.Columns)
{
bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);//源列名->目标列名
}
try //如果发生异常就回滚
{
bulkCopy.WriteToServer(table);//把table表写入数据库表中
tx.Commit();
}
catch (Exception ex)
{
tx.Rollback();
throw new Exception(ex.Message);
}
}
sw.Stop();
MessageBox.Show("耗时:" + sw.ElapsedMilliseconds + "秒");
}
}
}
错误代码:OracleBulkCopy进行事务处理的
Oracle的OracleBulkCopy不支持事务处理的更多相关文章
- Oracle 11g 的官方支持周期和时限
Oracle公司对于自身产品的支持策略大多数人很难搞清楚,对于Oracle Database 11g的支持周期,有很多朋友产生了异议,参考下文提到的一些文件,希望可以帮助大家理解Oracle的产品支持 ...
- 【Spring】Spring系列5之Spring支持事务处理
5.Spring支持事务处理 5.1.事务准备 以上代码结构与AOP的前置通知.返回通知.异常通知.后置通知一样. 5.2.声明式事务 5.2.1.基于注解 5.2.2.基于配置文件 5. 3.事务传 ...
- 【Oracle】ORACLE SQL Developer不支持JAVA版本
ORACLE SQL Developer不支持JAVA版本 今天我打开 ORACLE SQL Developer准备开始练手.没有想到却给出了错误提示. 我 是安装了java JDK的而且是1.6版本 ...
- oracle in表达式参数支持最大上限1000个
oracle in表达式参数支持最大上限1000个 方法是拆分为多个 col in ... or col in ... #region 解决大于1000的问题 private String getSu ...
- [转帖]Oracle 数据库官方不支持VMWare
Oracle 数据库官方不支持VMWare [日期:2014-05-13] 来源:Linux社区 作者:myhuaer [字体:大 中 小] https://www.linuxidc.com/L ...
- MySQL不支持事务处理的解决方法
MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理. 在MySQL中,只有InnoDB存储引擎类型的数据表才能支持事务处理. 因此,如果想让MySQL支持事务处理,只要将 ...
- oracle+ibatis 批量插入-支持序列自增
首先请先看我前面一篇帖子了解oracle批量插入的sql:[oracle 批量插入-支持序列自增] 我用的ibatis2.0,sqlMap文件引入的标签如下: <!DOCTYPE sqlMap ...
- oracle开启numa的支持
在11.2中,即使是系统支持numa架构,oracle默认也不再检测硬件是否支持numa,也不开启对numa的支持. 要想开启对numa的支持,必须设置隐含参数: _enable_NUMA_suppo ...
- Oracle存储过程中不支持DML语言的解决方法(针对遇见的DROP关键字)
---存储过程中的原语句: ---删除表 DROP TABLE A_NEWTDDATA; --报错 经查询:存储过程不支持DML语言: 解决方法: execute immediate 'DROP TA ...
随机推荐
- 【C++基础】 类中static private public protected
静态成员在一个类的所有实例间共享数据 “类属性”,是描述类的所有对象共同特征的一个数据项,对所有对象,它的值相同,static定义,为整个类所共有.相对于“实例属性” 如果static成员是私有类型, ...
- Linq to EF 与Linq to Object 使用心得
大家都知道Linq既可以用来查询数据库对象(我这里指的是Entity FrameWork里的Model对象),也可以用来查询内存中的IEnumerable对象. 两者单独查询时都不会出现什么问题,不过 ...
- 实战案例--Grunt构建Web程序
GruntJS构建Web程序.使用Gruntjs来搭建一个前端项目,然后使用grunt合并,压缩JS文件,熟练了node.js安装和grunt.js安装后,接下来来实战一个案例,案例是根据snandy ...
- **PHP随机数算法
<?php $tmp = range(1,30);print_r(array_rand($tmp,10));?> 输出: Array( [0] => 6 [1] => 8 [2 ...
- Android中JSON数据格式的简单使用
源码: package com.wangzhu.demo; import java.io.BufferedReader; import java.io.IOException; import java ...
- C++和pascal之间的通信
// MyFirst.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include "Winsock2.h"#pragm ...
- Project Euler 79:Passcode derivation
Passcode derivation A common security method used for online banking is to ask the user for three ra ...
- StringBuffer的用法
StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...
- Ubuntu下编译运行Kamailio
kamailio----配置没有成功,这个文档过几天删除,因为这个项目的文档非常少,而且qq群里的人也不活跃,现在正在研究Freeswitch,如果能够满足,就不研究这个了,这篇文档会删除. Kama ...
- 给360的六条建议(禁止异地登录,普通用户500G足够用了)
个人觉得,360云盘哪怕做个小改进,都不至于走到现在的地步,最后六条建议! 1.弄个实名制,身份证和手机号码双重绑定,每人限制申请一个账户. 2.禁止云盘的一切分享功能,采用封闭式,个人云盘资料其他人 ...