Oracle数据库连接问题,高手请进。

问题描述

先贴代码。Command=Connection.CreateCommand();Command.CommandText=string.Format("select{0}.nextvalfromdual",country.SequenceName);intid=int.Parse(Command.ExecuteScalar().ToString());if(cellarray.ContainsKey("ID"))cellarray["ID"]=id;elsecellarray.Add("ID",id);StringBuildercell_sb=newStringBuilder();cell_sb.AppendFormat("INSERTINTO{0}(",country.oracleTableName);StringBuildervalues_sb=newStringBuilder("VALUES(");inti=0;foreach(KeyValuePair<string,object>cellincellarray){if(i!=0){cell_sb.Append(',');values_sb.Append(',');}cell_sb.AppendFormat(""{0}"",cell.Key);stringparamName=string.Format(":{0}",cell.Key);values_sb.Append(paramName);Command.Parameters.Add(newOracle.DataAccess.Client.OracleParameter(paramName,cell.Value));i++;}Command.CommandText=string.Format("{0}){1})",cell_sb,values_sb);Command.ExecuteNonQuery();方法用来拼接一个INSERT语句,最后执行。需求是讲Excel中的数据,导入到Oracle数据库中,当连续执行40+万次,大概运行2小时左右,执行到红色代码位置,程序就停住不动。不会报异常,这是关掉本地连接后重新打开,红色语句报错。否则会卡在这里不运行。尝试过的解决办法但都失败:连续执行10万次后重新newOracleConnection,任然会遇到同样的问题。google了几篇文章,据说是由于连接池中的连接过期导致,但我是持续的执行INSERT操作,怎么会过期呢。采用Oracle.DataAccess.Client.OracleConnection.ClearAllPools()方法清空连接池后,问题依然存在。请问有何其他解决办法?

解决方案

解决方案二:
看了你的代码你只是连续拼接sql语句并没有连续执行插入数据方法具体如何做还是看看高手吧
解决方案三:
这个方法主要是负责拼接和执行一条INSERT语句。cellarray只一个字典,其中包含了从Excel读取过来的所有列、值对。外部是有方法来循环调用这个插入方法的。
解决方案四:
看你用的是ODP.NET,既然你是批量导入几十万数据,为什么不适用它提供的大批量数据导入的API呢,安装ODP.NET之后应该都有例子的吧,可以照葫芦画瓢
解决方案五:
批量导入的方式可以提高程序性能,正在尝试修改。但我觉得可能还会遇到连接超时的问题。这个问题造成的原因是什么呢?求解。
解决方案六:
该回复于2014-07-30 14:19:43被版主删除
解决方案七:
有高手来帮忙解答吗?
解决方案八:
你有事务写吧,你插入的数据很多,当你关闭的时候有可能还没插完,当你再次运行的时候又要重新开始插入,而你插入的是新的语句,没有调用update。所以有事务,到你停止的时候数据会自动回滚的我用的是sqlserver我觉得原理应该一样
解决方案九:

解决方案十:
恩感谢你的提醒,我现在改为使用ODP的批量插入,已经挂上事务了,同时上传速度也有显著提升。我就想搞懂,为啥会卡在哪不懂。什么原因。·
解决方案十一:
周一了。高手请进啊。
解决方案十二:
你一直在循环读取excle的内容,十几万的数据,你拼接sql语句就需要2个小时。你打开数据库没有操作,没有关闭,最后只能是超时。
解决方案十三:
引用11楼zhaolei_zsy的回复:

你一直在循环读取excle的内容,十几万的数据,你拼接sql语句就需要2个小时。你打开数据库没有操作,没有关闭,最后只能是超时。

正解连接一直在等待操作。这么搞貌似数据库被你一个人挂起了吧!别人还能用??个人觉得不建议这么用吧
解决方案十四:
引用12楼F546445693的回复:

Quote: 引用11楼zhaolei_zsy的回复:
你一直在循环读取excle的内容,十几万的数据,你拼接sql语句就需要2个小时。你打开数据库没有操作,没有关闭,最后只能是超时。

正解连接一直在等待操作。这么搞貌似数据库被你一个人挂起了吧!别人还能用??个人觉得不建议这么用吧

请注意看我的代码,2个小时不是什么事都没错。每条数据拼接完成后都会立即提交到数据库。
解决方案十五:
继续等答案。知情者请进~!
解决方案:
我就说我现在看到的吧,,你每次读取数据后,然后打开连接,这是判断连接打开没有,如果没有,就把连接打开,然后将输入导入,导入完后,关闭连接,然后继续循环,这样绝对不会再出问题了吧
解决方案:
引用15楼qq7413755的回复:

我就说我现在看到的吧,,你每次读取数据后,然后打开连接,这是判断连接打开没有,如果没有,就把连接打开,然后将输入导入,导入完后,关闭连接,然后继续循环,这样绝对不会再出问题了吧

这个办法没用的。
解决方案:
是不是可以分批执行啊
解决方案:
一个Excel40W+数据是不是太大了???
解决方案:
你一直在用序列去查出Command.CommandText=string.Format("select{0}.nextvalfromdual",country.SequenceName);intid=int.Parse(Command.ExecuteScalar().ToString());我不清楚你要做什么,但我想是不是讲序列和触发器用作一起,那样你插入的时候就不需要再去序列去查询了。你要思考一下,40几万的数据,那样的数据量也不算小。
解决方案:
引用19楼zhaolei_zsy的回复:

你一直在用序列去查出Command.CommandText=string.Format("select{0}.nextvalfromdual",country.SequenceName);intid=int.Parse(Command.ExecuteScalar().ToString());我不清楚你要做什么,但我想是不是讲序列和触发器用作一起,那样你插入的时候就不需要再去序列去查询了。你要思考一下,40几万的数据,那样的数据量也不算小。

再接一下,你最好是在sql语句上好好下下功夫。
解决方案:
Oracle.DataAccess.Client.OracleCommand.ArrayBindCount这个设置下然后付值就只要付一个数组

时间: 2024-09-13 11:30:57

Oracle数据库连接问题,高手请进。的相关文章

php curl采集高手请进

问题描述 php curl采集高手请进 http://www.lecai.com/ 这个网站怎么用php/url技术进行模拟登录?求参考程序..... 解决方案 我大致看了一下,个人习惯使用Snoopy.class.php模拟登陆,觉得不好可以忽略 POST http://www.lecai.com/user/ajax_login.php HTTP/1.1Host: www.lecai.comUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:3

微积分-vc 数字图像处理高手请进!

问题描述 vc 数字图像处理高手请进! 图像的梯度锐化 看到上面的公式,我叫一个晕,请问这是哪里才能学到呀?什么意思呀?还需要学习微积分吗? 解决方案 这个公式你仔细琢磨就懂了,第一个实际上是数字的差分,求得是点(i,j)的x和y方向的微分值的和,这里理解为这个像素点的梯度值.第二个就是锐化的过程,当梯度值大于某个阈值时,锐化的结果即此点的梯度值,若梯度小于那个阈值,则锐化的结果是原像素的值. 像这类比较基础的图像处理方法,建议你看一下清华大学章毓名教授写的<图像工程>. 解决方案二: 数字图

apt-ubuntu 高手请进,yara not found

问题描述 ubuntu 高手请进,yara not found 用apt-get intstall yara后,还是出现了configure: error: yara not found 请问为什么会这样,好烦啊,在线求高手解答 解决方案 spt-get install 是安装命令, 如果系统没有找到 yara 的安装包,就会这样. 查查 ubuntu 的在线安装配置. 解决方案二: 一个是看是否安装成功,其次看安装的yara能否执行,有没有错误.

c语言-C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数、负数和零分块求和,

问题描述 C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数.负数和零分块求和, 对一组无规律数据按正数.负数和零分块求和,即要求将序列中相邻的正数.零及负数分块累加输出,格式要求: 源数据: 2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...(共100个) 整理输出为: 2,5,13,19,0,0,-2,-3,-7,0,5,11,18,-5,-7...(共100个) 以下程序哪里出了问题?我搞了2星期,总是得不到完整输出: int main(

高分悬赏 请大神指导-VBA高手请进 懂得webbrowser

问题描述 VBA高手请进 懂得webbrowser 请问如何通过VBA能够获取网页弹出窗体的Docuement对象,我是要操作弹出窗体里面的一线控件完成自动复制! 我现在可以获取到主页面的Document对象.

hbm-Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等...

问题描述 Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等... 表1: File (FID,Fname) 表2: UserGroup(GID,Gname) 表3: ActionPermissions(PID,Pname) 表4: File_Group_Permissions(ID,FID,GID,PID) 用四个表完成给某个文件指定用户组每个用户组指定权限,一文件对应多个用户组 每个用户组针对这个文件有不同的操作权限.Hibernate应该如何配置,表结构是否合理

vb参数传递-VB高手请进!在线等。。——shell使用dos命令时参数的传递

问题描述 VB高手请进!在线等..--shell使用dos命令时参数的传递 怎样才能将%LOGPATH%所替代的内容传递到其中? (不要写成调用bat的形式) 解决方案 不行的,%logpath%不能包在括号里,应该这样 Shell "cmd /k mkdir "+LOGPATH+" > nul 2>&1", vbNormalNoFocus vb调用dos是直接运行引号内的,而不给某一变量赋值.另外包在百分号内的是bat变量而不是vb的变量 解决

多线程-高手请进!!!---线程安全问题,怎么解决new String 问题

问题描述 高手请进!!!---线程安全问题,怎么解决new String 问题 场景是:一个订单号只能一个在付款,只能一个线程处理,不同的订单号支持并发处理 现在如果是new String("20140719140818");就有问题怎么解决 如果不是new出来的,什么情况会出现问题 public class Test { public static void main(String[] args) { new Thread(){ public void run(){ pay(&quo

贝叶斯+mahout-朴素贝叶斯分类问题 高手请进

问题描述 朴素贝叶斯分类问题 高手请进 网上资料讲mahout 贝叶斯的很多,都是讲准备数据,划分测试集训练集,测试训练样本...但是,之后呢?有了这个测试很好的模型,怎么对其他的数据分类啊?比如我通过mahout进行朴素贝叶斯分类,得到训练集,测试也很好,那么有了这个训练集之后怎么对其他数据进行分类呢.说的越详细越好. 解决方案 运行mahout的朴素贝叶斯分类器 1.准备数据1.1 下载数据集,并解压 wget http://people.csail.mit.edu/jrennie/20Ne