RT,不想基于ROWS一条条做INSERT,那样太慢了,50万条要等老半天,不知道有什么命令可以直接导入?

解决方案 »

  1.   

    insert table
    select * from table2
      

  2.   

    你还是慢慢导吧,我们50多W的数据,不知道那个GG,导了几个通宵了
      

  3.   

    insert table
    select * from table2
    -------------------------------
    是datatable 不是SQL表。
    ----------
    2.0 中
    sqlbulkcopy
    能具体讲下用法吗?
      

  4.   

    把datatable的内容 导入到execl 比如一万条行成一个表 , 然后把execl表导入数据库。看看速度会咋样 我也没试过
      

  5.   

    直接用数据会很快的,大约10分钟都不要就可以了。我以前删除了一个表,约100万条数据,后找到备份,从SQL中直接插入,10分钟就OK了,不要用C#来处理.
      

  6.   

    直接用SQL应该是最快的
    -----------------------------
    怎么用啊?数据在DATATABLE里。
      

  7.   

    如果是我来问这个问题的话,别人告诉我sqlbulkcopy,我马上就会查一下msdn.不知道楼主是怎么想的?
      

  8.   

    很奇怪,DATATABLE这里这么多数据怎么来的。
      

  9.   

    嗯.LS说的好...不过也多夸LZ的贴,让我的ADO类库里又多了一种处理大量数据的好方法...谢了...
      

  10.   

    测试代码:DateTime startTime;
        protected void Button1_Click(object sender, EventArgs e)
        {
            startTime = DateTime.Now;
            string SrcConString;
            string DesConString;
            SqlConnection SrcCon = new SqlConnection();
            SqlConnection DesCon = new SqlConnection();
            SqlCommand SrcCom = new SqlCommand();
            SqlDataAdapter SrcAdapter = new SqlDataAdapter();
            DataTable dt = new DataTable();
            SrcConString =
            ConfigurationManager.ConnectionStrings["SrcDBConnectionString"].ConnectionString;
            DesConString =
            ConfigurationManager.ConnectionStrings["DesDBConnectionString"].ConnectionString;
            SrcCon.ConnectionString = SrcConString;
            SrcCom.Connection = SrcCon;
            SrcCom.CommandText = " SELECT * From [SrcTable]";
            SrcCom.CommandType = CommandType.Text;
            SrcCom.Connection.Open();
            SrcAdapter.SelectCommand = SrcCom;
            SrcAdapter.Fill(dt);
            SqlBulkCopy DesBulkOp;
            DesBulkOp = new SqlBulkCopy(DesConString,
            SqlBulkCopyOptions.UseInternalTransaction);
            DesBulkOp.BulkCopyTimeout = 500000000;
            DesBulkOp.SqlRowsCopied +=
            new SqlRowsCopiedEventHandler(OnRowsCopied);
            DesBulkOp.NotifyAfter = dt.Rows.Count;
            try
            {
                DesBulkOp.DestinationTableName = "SrcTable";
                DesBulkOp.WriteToServer(dt);
            }
            catch (Exception ex)
            {
                lblResult.Text = ex.Message;
            }
            finally
            {
                SrcCon.Close();
                DesCon.Close();
            }
        }    private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
        {
            lblCounter.Text += args.RowsCopied.ToString() + " rows are copied<Br>";
            TimeSpan copyTime = DateTime.Now - startTime;
            lblCounter.Text += "Copy Time:" + copyTime.Seconds.ToString() + "." + copyTime.Milliseconds.ToString() + " seconds";
        }代码说明:SqlBulkCopy DesBulkOp;
    DesBulkOp = new SqlBulkCopy(DesConString, SqlBulkCopyOptions.UseInternalTransaction);先生成SqlBulkCopy 实例,构造函数指定了目标数据库,使用SqlBulkCopyOptions.UseInternalTransaction是指迁移动作指定在一个Transaction当中,如果数据迁移中产生错误或异常将发生回滚。WriteToServer方法就是将数据源拷备到目标数据库。在使用WriteToServer方法之前必须先指定DestinationTableName属性,也就是目标数据库的表名,
    这种方式我用上了,速度很快!我现在把代码贴出来.希望能帮到您...^o^