"System.Data.OleDb.OleDbException: 未指定的错误
ORA-01000: 超出打开游标的最大数
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteScalar()
------解决方法--------------------------------------------------------
游标没关闭
或datareader没关闭
或连接没关闭
------解决方法--------------------------------------------------------
把代码给出来看看
------解决方法--------------------------------------------------------
打开游标后及时关闭
------解决方法--------------------------------------------------------
for i = 0 To count - 1
....
command3.ExecuteNonQuery()
....
next
程序要尽量的不这么写循环,这样会极慢的.
可以先用一个string拼好一个Sql语句,一次执行,或用Xml表示数据,编写存储过程,在存储过程里打开XmL进行数据的操作.
------解决方法--------------------------------------------------------
先定义Sql:
dim sql as string
for i = 0 To count - 1
sql += "insert into temp(A1,A2) values( " & a1 & " ', ' " & a2 & " ',) ; "
next i;
拼好后开始一次性执行:
Dim data3 As OleDb.OleDbDataReader
Dim command3 As New OleDb.OleDbCommand
command3.Connection = conn
command3.CommandText = sql
command3.ExecuteNonQuery()
command3 = Nothing
如果Sql会很长,或count 很大的时候,可以分几次执行以提高执行效率.
------解决方法--------------------------------------------------------
多次执行,没有问题的
我用string数组放SQL语句,执行几万次插入,也不过三分钟~
------解决方法--------------------------------------------------------
仔细看了一下,你在循环内放了很多不必要的东西
------解决方法--------------------------------------------------------
Command可以多次执行的,
每次重新创建,重新指定连接都是不必要的
只要重新
command3.CommandText = newSQL
command3.ExecuteNonQuery()
即可,其他的都去掉
你也可以象我一样,把所有SQL语句事先准备好放在一个string数组内