从一个表读取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对象?

解决方案 »

  1.   

      sqlconnection conn= new sqlconnection("数据库连接串");
      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();
      

  2.   


    通常读取大量数据是不用reader的。
    你这样来效率低多了。
    确实建议放存储过程。
      

  3.   

    你这样写:
    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();
      

  4.   

    没关系,有连接池就可以,连接池维护着一些数据库连接
    代码里的操作,关闭就只是放回连接池,不是真正关闭数据库连接
    我在把一个表插入另一表的操作里,要比较每列的值,一次只能执行一条SQL语句,每次也是打开再关闭。没发现有性能问题
      

  5.   


    我这样写的时候 会提示"关闭datareader" 而出错!
    所以这样是不行的!
      

  6.   


    其实我是调用存储过程了, 但存储过程也要dr后 while 里再进行插入(insert 存储过程)啊!
      

  7.   

    直接执行一句sql就可以了。。insert into 。。select
      

  8.   


    select出来的结果要做处理(很多处理),不能直接 insert into 。。select 。。问题似乎要解决了!
      

  9.   

    用事务呀
    http://zhidao.baidu.com/question/93887018.html
      

  10.   

    只要一个conn.Open();
    最后再加一个conn.Close();就可以了