我有两个数据库,用一个DataTable存放了一个数据库中的表中的所有数据。现在我想把这个DataTable中的所有数据插入到另一个数据库中的表中。应该怎样做?
SqlDataAdapter.Update方法怎样使用。有完整的例子更好

解决方案 »

  1.   

    ADO.Net2.0中提供了SqlBulkCopy类
    SqlBulkCopy 类
    • DestinationTableName:目标数据库的表名
    • BulkCopyTimeout:指定操作完成的Timeout时间
    • NotifyAfter:指定通知通知事件前处理的数据行数
    • WriteToServer方法:将数据源拷备到目标数据库
    • SqlBulkCopy DesBulkOp = new
    SqlBulkCopy(DesConString,
    SqlBulkCopyOptions.UseInternalTransaction);
    – 指定了目标数据库,使用
    SqlBulkCopyOptions.UseInternalTransaction是指迁移动作指定
    在一个Transaction当中,如果数据迁移中产生错误或异常将发生
    回滚。
    • 使用SqlBulkCopy 类只能向SQL Server 表写入数据。但
    是,数据源不限于SQL Server;可以使用任何数据源,
    只要数据可加载到DataTable 实例或可使用IDataReader
    实例读取数据。
      

  2.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    using System.Configuration;namespace Demo17
    {
        public partial class Form1 : Form
        {
            DateTime startTime; 
            public Form1()
            {
                InitializeComponent();
            }        private void btnTest_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 Production.Product";
                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;
                //DesBulkOp.ColumnMappings.Add("SrcCol", "DesCol");
                try
                {
                    DesBulkOp.DestinationTableName = "Product";
                    DesBulkOp.WriteToServer(dt);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    SrcCon.Close();
                    DesCon.Close();
                }         }
            private void OnRowsCopied(object sender, SqlRowsCopiedEventArgs args)
            {
                lblCounter.Text += args.RowsCopied.ToString() + " rows are copied\r\n";
                TimeSpan copyTime = DateTime.Now - startTime;
                lblCounter.Text += "Copy Time:" + copyTime.Seconds.ToString() + "." + copyTime.Milliseconds.ToString() + " seconds";
            } 
        }
    }
      

  3.   

    //jp 为dataset1的其中一张表
    for(int i=0;i<dataset1.Tables["jp"].Rows.Count;i++)
    {
    cmd.CommandText="insert into  表名(字段1,字段2,字段...) select dataset1.Tables["jp"].Rows[i][1].ToString(),dataset1.Tables["jp"].Rows[i][2].ToString(),dataset1.Tables["jp"].Rows[i][3].ToString()...; cmd.ExecuteNonQuery();
    }
      

  4.   


    如果数据非常多的时候,这个效率应该是非常低的还是用SqlBulkCopy效率比较高,毕竟是.net平台下面已经有的类,处理数据的能力应该强得多,学习了一下