从一个表读取10000行记录,然后插入到另一张表里。
我的做法是这样的:
sqlconnection conn= new sqlconnection("数据库连接串");
conn.Open();
sqlcommand cmd=new sqlcommand("select * from table",conn);
sqldatareader dr=cmd.ExecuteReader(); while(dr.read())
{
sqlconnection con= new sqlconnection("数据库连接串");
con.Open();
sqlcommand cmdInsert=new sqlcommand("insert 语句",con);
cmdInsert.ExecuteNonQuery();
con.dispose();
}
conn.dispose();
-----------------------------------------------------------------
那么这里while里边就会反复打开 关闭sqlconnection了, 有没有方法不这样反复打开关闭呀?
或能否使用 while 外创建的conn对象?
我的做法是这样的:
sqlconnection conn= new sqlconnection("数据库连接串");
conn.Open();
sqlcommand cmd=new sqlcommand("select * from table",conn);
sqldatareader dr=cmd.ExecuteReader(); while(dr.read())
{
sqlconnection con= new sqlconnection("数据库连接串");
con.Open();
sqlcommand cmdInsert=new sqlcommand("insert 语句",con);
cmdInsert.ExecuteNonQuery();
con.dispose();
}
conn.dispose();
-----------------------------------------------------------------
那么这里while里边就会反复打开 关闭sqlconnection了, 有没有方法不这样反复打开关闭呀?
或能否使用 while 外创建的conn对象?
conn.Open();
sqlcommand cmd=new sqlcommand("select * from table",conn);
sqldatareader dr=cmd.ExecuteReader(); while(dr.read())
{
sqlcommand cmdInsert=new sqlcommand("insert 语句",conn);
cmdInsert.ExecuteNonQuery();
}
conn.dispose();
通常读取大量数据是不用reader的。
你这样来效率低多了。
确实建议放存储过程。
sqlconnection conn= new sqlconnection("数据库连接串");
sqlcommand cmd=new sqlcommand("select * from table",conn);
conn.Open();
sqldatareader dr=cmd.ExecuteReader();
while(dr.read())
{
cmd.CommandText = "insert 语句";
cmd.ExecuteNonQuery();
}
conn.Close();
代码里的操作,关闭就只是放回连接池,不是真正关闭数据库连接
我在把一个表插入另一表的操作里,要比较每列的值,一次只能执行一条SQL语句,每次也是打开再关闭。没发现有性能问题
我这样写的时候 会提示"关闭datareader" 而出错!
所以这样是不行的!
其实我是调用存储过程了, 但存储过程也要dr后 while 里再进行插入(insert 存储过程)啊!
select出来的结果要做处理(很多处理),不能直接 insert into 。。select 。。问题似乎要解决了!
http://zhidao.baidu.com/question/93887018.html
最后再加一个conn.Close();就可以了