一次性要插入1000条数据怎么效率最高啊?

tomaot123 2013-10-15 04:56:51
本来打算吧1000条SQL拼成一条一起执行的,貌似数据量多了有点问题..
有啥其他办法吗?

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);
麻烦大家帮忙下
...全文
3026 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
火拼阿三 2013-10-18
  • 打赏
  • 举报
回复
引用 17 楼 gzw13999 的回复:
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
脸肿了 2013-10-18
  • 打赏
  • 举报
回复
SqlBulkCopy
t_kong 2013-10-18
  • 打赏
  • 举报
回复
http://www.cnblogs.com/Seabiscuit/archive/2010/05/25/1743341.html 看看这个是否帮得上忙
  • 打赏
  • 举报
回复
insert tab col value,value1,value2,value3...value999
wind_cloud2011 2013-10-17
  • 打赏
  • 举报
回复
大量数据用SqlBulkCopy ,上万条记录入库
jiaoshiyao 2013-10-17
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
google blukcopy
你的编程是从哪里学的???
PlatoEternal 2013-10-17
  • 打赏
  • 举报
回复
一句 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 这是我之前做的项目,不用解释吧,希望你有帮助
叫我三三 2013-10-17
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/360222649
paopaozhu8899 2013-10-17
  • 打赏
  • 举报
回复
引用 27 楼 qldsrx 的回复:
[quote=引用 5 楼 caozhy 的回复:] 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();
[/quote] 怎么没有?Oracle.DataAccess.Client.OracleBulkCopy
qldsrx 2013-10-17
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
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();
biind 2013-10-16
  • 打赏
  • 举报
回复
请问什么界面操作,会连续插入1000条数据,费解!
嫣然fly 2013-10-16
  • 打赏
  • 举报
回复
不懂嘿,来学习的
小青年_jin 2013-10-16
  • 打赏
  • 举报
回复
八楼正解,我也做过这样同样的程序,但是oracle中有些类型字段用这个不行。
dralion 2013-10-16
  • 打赏
  • 举报
回复
如果是2008 也可以先定义表类型,然后作为参数插入;
WM_JAWIN 2013-10-16
  • 打赏
  • 举报
回复
先插到临时表,然后再转移过去
qq874655551 2013-10-16
  • 打赏
  • 举报
回复
用 blukcopy,
yanchangshan 2013-10-16
  • 打赏
  • 举报
回复
在这里留个记号 方便后面学习
Ahoo 2013-10-16
  • 打赏
  • 举报
回复
SqlBulkCopy > 事物
GhostAMD 2013-10-16
  • 打赏
  • 举报
回复
同意 blukcopy
火龙岛主 2013-10-16
  • 打赏
  • 举报
回复
使用存储过程
加载更多回复(12)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧