有啥其他办法吗?
public static int ExecuteNonQuery2(string strSql)
{
using (OracleConnection connection = new OracleConnection(LocalDb2))
{
using (OracleCommand cmd = new OracleCommand(strSql, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.OracleClient.OracleException E)
{
connection.Close();
throw new Exception(E.Message);
}
}
}
}
SQL拼接完后执行这个
string bbb='insert into ......'估计有1000条
OracleHelper.ExecuteNonQuery2(bbb);
麻烦大家帮忙下
32 个解决方案
#1
事务
#2
把这1000条数据分为50条一组,然后做20次事物,根据你服务器的配置,尽量做带毫秒级。
#3
如果你的1000条数据都是现成的sql语句并且拼接到了一起了string bbb='insert into ......'估计有1000条
那就直接插入 搞什么事务啊 都是坑
那就直接插入 搞什么事务啊 都是坑
#4
DataAdapter.Update
#5
google blukcopy
#6
不知道呢,为什么要在
#7
就看你插入的值是什么?肯定有高效的办法
#8
批量插入,该类应实现 Sql是System.Data.SqlClient.SqlBulkCopy ,Oracle 也有对应的类
#9
+1
#10
拼一条sql语句
insert into table1(id,c1)
select 1,'aaa1' union all
select 2,'aaa1' union all
select 3,'aaa1' union all
...
select 1000,'aaa1'
提交一次
insert into table1(id,c1)
select 1,'aaa1' union all
select 2,'aaa1' union all
select 3,'aaa1' union all
...
select 1000,'aaa1'
提交一次
#11
用 blukcopy,
#12
先插到临时表,然后再转移过去
#13
如果是2008 也可以先定义表类型,然后作为参数插入;
#14
八楼正解,我也做过这样同样的程序,但是oracle中有些类型字段用这个不行。
#15
不懂嘿,来学习的
#16
请问什么界面操作,会连续插入1000条数据,费解!
#17
SqlBulkCopy 插入大量数据非常快, 比逐条插入快几十倍.
要插入的数据放进 DataTable dt 中
要插入的数据放进 DataTable dt 中
connection.Open();
using (SqlBulkCopy sqlBC = new SqlBulkCopy(connection))
{
//一次批量的插入的数据量
sqlBC.BatchSize = dt.Rows.Count;
//超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
sqlBC.BulkCopyTimeout = 600;
//設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。
//sqlBC.NotifyAfter = 10000;
//sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
//设置要批量写入的表
sqlBC.DestinationTableName = 表名;
//自定义的datatable和数据库的字段进行对应
sqlBC.ColumnMappings.Add("字段", "字段");
//批量写入
if (dt.Rows.Count != 0 && dt != null)
{
sqlBC.WriteToServer(dt);
dt.Dispose();
}
}
#18
高潮了 oh~~no~~
#19
使用存储过程
#20
同意 blukcopy
#21
SqlBulkCopy > 事物
#22
在这里留个记号 方便后面学习
#23
http://bbs.csdn.net/topics/360222649
#24
一句 sql语句搞定:
Insert Into TRUCK(TruckCode,TruckName,TruckType,IcardNo,TruckCap,OperateTime)Select VEHICLE_LICENSE,TOOL_NUMBER,ATTRIBUTE3,ATTRIBUTE2,WEIGHT_MAX,LAST_UPDATE_DATE From CUX_9_FRTC_FREIGHT_TOOLS_DEF_V 这是我之前做的项目,不用解释吧,希望你有帮助
Insert Into TRUCK(TruckCode,TruckName,TruckType,IcardNo,TruckCap,OperateTime)Select VEHICLE_LICENSE,TOOL_NUMBER,ATTRIBUTE3,ATTRIBUTE2,WEIGHT_MAX,LAST_UPDATE_DATE From CUX_9_FRTC_FREIGHT_TOOLS_DEF_V 这是我之前做的项目,不用解释吧,希望你有帮助
#25
你的编程是从哪里学的???
#26
大量数据用SqlBulkCopy ,上万条记录入库
#27
Oracle不支持也没有SqlBulkCopy类,那个只有SqlServer数据库才支持,Oracle可以用数组形式的参数批量提交来实现,但那个绝对不能叫“BulkCopy”。
OracleCommand command = new OracleCommand("链接字符串");
command.ArrayBindCount = 1000;
command.CommandText = "insert into dept values(:deptno, :deptname, :loc)";
int[] deptNo = new int[1000];
string[] dname = new string[1000];
string[] loc = new string[1000];
command.Parameters.Add(new OracleParameter("deptno", OracleDbType.Int32) { Value = deptNo });
command.Parameters.Add(new OracleParameter("dname", OracleDbType.Varchar2) { Value = dname });
command.Parameters.Add(new OracleParameter("loc", OracleDbType.Varchar2) { Value = loc });
command.ExecuteNonQuery();
#28
怎么没有?Oracle.DataAccess.Client.OracleBulkCopy
#29
insert tab col value,value1,value2,value3...value999
#30
http://www.cnblogs.com/Seabiscuit/archive/2010/05/25/1743341.html
看看这个是否帮得上忙
看看这个是否帮得上忙
#31
SqlBulkCopy
#32
SqlBulkCopy 插入大量数据非常快, 比逐条插入快几十倍.
要插入的数据放进 DataTable dt 中
connection.Open();
using (SqlBulkCopy sqlBC = new SqlBulkCopy(connection))
{
//一次批量的插入的数据量
sqlBC.BatchSize = dt.Rows.Count;
//超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
sqlBC.BulkCopyTimeout = 600;
//設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。
//sqlBC.NotifyAfter = 10000;
//sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
//设置要批量写入的表
sqlBC.DestinationTableName = 表名;
//自定义的datatable和数据库的字段进行对应
sqlBC.ColumnMappings.Add("字段", "字段");
//批量写入
if (dt.Rows.Count != 0 && dt != null)
{
sqlBC.WriteToServer(dt);
dt.Dispose();
}
}
+1
#1
事务
#2
把这1000条数据分为50条一组,然后做20次事物,根据你服务器的配置,尽量做带毫秒级。
#3
如果你的1000条数据都是现成的sql语句并且拼接到了一起了string bbb='insert into ......'估计有1000条
那就直接插入 搞什么事务啊 都是坑
那就直接插入 搞什么事务啊 都是坑
#4
DataAdapter.Update
#5
google blukcopy
#6
不知道呢,为什么要在
#7
就看你插入的值是什么?肯定有高效的办法
#8
批量插入,该类应实现 Sql是System.Data.SqlClient.SqlBulkCopy ,Oracle 也有对应的类
#9
批量插入,该类应实现 Sql是System.Data.SqlClient.SqlBulkCopy ,Oracle 也有对应的类
+1
#10
拼一条sql语句
insert into table1(id,c1)
select 1,'aaa1' union all
select 2,'aaa1' union all
select 3,'aaa1' union all
...
select 1000,'aaa1'
提交一次
insert into table1(id,c1)
select 1,'aaa1' union all
select 2,'aaa1' union all
select 3,'aaa1' union all
...
select 1000,'aaa1'
提交一次
#11
用 blukcopy,
#12
先插到临时表,然后再转移过去
#13
如果是2008 也可以先定义表类型,然后作为参数插入;
#14
八楼正解,我也做过这样同样的程序,但是oracle中有些类型字段用这个不行。
#15
不懂嘿,来学习的
#16
请问什么界面操作,会连续插入1000条数据,费解!
#17
SqlBulkCopy 插入大量数据非常快, 比逐条插入快几十倍.
要插入的数据放进 DataTable dt 中
要插入的数据放进 DataTable dt 中
connection.Open();
using (SqlBulkCopy sqlBC = new SqlBulkCopy(connection))
{
//一次批量的插入的数据量
sqlBC.BatchSize = dt.Rows.Count;
//超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
sqlBC.BulkCopyTimeout = 600;
//設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。
//sqlBC.NotifyAfter = 10000;
//sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
//设置要批量写入的表
sqlBC.DestinationTableName = 表名;
//自定义的datatable和数据库的字段进行对应
sqlBC.ColumnMappings.Add("字段", "字段");
//批量写入
if (dt.Rows.Count != 0 && dt != null)
{
sqlBC.WriteToServer(dt);
dt.Dispose();
}
}
#18
高潮了 oh~~no~~
#19
使用存储过程
#20
同意 blukcopy
#21
SqlBulkCopy > 事物
#22
在这里留个记号 方便后面学习
#23
http://bbs.csdn.net/topics/360222649
#24
一句 sql语句搞定:
Insert Into TRUCK(TruckCode,TruckName,TruckType,IcardNo,TruckCap,OperateTime)Select VEHICLE_LICENSE,TOOL_NUMBER,ATTRIBUTE3,ATTRIBUTE2,WEIGHT_MAX,LAST_UPDATE_DATE From CUX_9_FRTC_FREIGHT_TOOLS_DEF_V 这是我之前做的项目,不用解释吧,希望你有帮助
Insert Into TRUCK(TruckCode,TruckName,TruckType,IcardNo,TruckCap,OperateTime)Select VEHICLE_LICENSE,TOOL_NUMBER,ATTRIBUTE3,ATTRIBUTE2,WEIGHT_MAX,LAST_UPDATE_DATE From CUX_9_FRTC_FREIGHT_TOOLS_DEF_V 这是我之前做的项目,不用解释吧,希望你有帮助
#25
google blukcopy
#26
大量数据用SqlBulkCopy ,上万条记录入库
#27
google blukcopy
Oracle不支持也没有SqlBulkCopy类,那个只有SqlServer数据库才支持,Oracle可以用数组形式的参数批量提交来实现,但那个绝对不能叫“BulkCopy”。
OracleCommand command = new OracleCommand("链接字符串");
command.ArrayBindCount = 1000;
command.CommandText = "insert into dept values(:deptno, :deptname, :loc)";
int[] deptNo = new int[1000];
string[] dname = new string[1000];
string[] loc = new string[1000];
command.Parameters.Add(new OracleParameter("deptno", OracleDbType.Int32) { Value = deptNo });
command.Parameters.Add(new OracleParameter("dname", OracleDbType.Varchar2) { Value = dname });
command.Parameters.Add(new OracleParameter("loc", OracleDbType.Varchar2) { Value = loc });
command.ExecuteNonQuery();
#28
google blukcopy
Oracle不支持也没有SqlBulkCopy类,那个只有SqlServer数据库才支持,Oracle可以用数组形式的参数批量提交来实现,但那个绝对不能叫“BulkCopy”。OracleCommand command = new OracleCommand("链接字符串");
command.ArrayBindCount = 1000;
command.CommandText = "insert into dept values(:deptno, :deptname, :loc)";
int[] deptNo = new int[1000];
string[] dname = new string[1000];
string[] loc = new string[1000];
command.Parameters.Add(new OracleParameter("deptno", OracleDbType.Int32) { Value = deptNo });
command.Parameters.Add(new OracleParameter("dname", OracleDbType.Varchar2) { Value = dname });
command.Parameters.Add(new OracleParameter("loc", OracleDbType.Varchar2) { Value = loc });
command.ExecuteNonQuery();
怎么没有?Oracle.DataAccess.Client.OracleBulkCopy
#29
insert tab col value,value1,value2,value3...value999
#30
http://www.cnblogs.com/Seabiscuit/archive/2010/05/25/1743341.html
看看这个是否帮得上忙
看看这个是否帮得上忙
#31
SqlBulkCopy
#32
SqlBulkCopy 插入大量数据非常快, 比逐条插入快几十倍.
要插入的数据放进 DataTable dt 中
connection.Open();
using (SqlBulkCopy sqlBC = new SqlBulkCopy(connection))
{
//一次批量的插入的数据量
sqlBC.BatchSize = dt.Rows.Count;
//超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
sqlBC.BulkCopyTimeout = 600;
//設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。
//sqlBC.NotifyAfter = 10000;
//sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);
//设置要批量写入的表
sqlBC.DestinationTableName = 表名;
//自定义的datatable和数据库的字段进行对应
sqlBC.ColumnMappings.Add("字段", "字段");
//批量写入
if (dt.Rows.Count != 0 && dt != null)
{
sqlBC.WriteToServer(dt);
dt.Dispose();
}
}
+1