我现在从XML从服务器读取到很大批数据,要入到本地数据库,读取到的数据放在DataTable,DataTable的结构跟数据库里表结构完全一致,有数据库复制插入方法如:
insert into t1 select * from t2
这样就可以把t2表的数据全部复制到t1表,速度很快我现在DataTable想实现上面这个,因为数据量到,不考虑单条录入方式!

解决方案 »

  1.   

    什么数据库,不同的库有不同的将数据块插入的方法,sql方式的最标准,也最慢
      

  2.   

    批量插入using(SqlConnection conn = new SqlConnection(connectionString))...{
        conn.Open();
        SqlDataAdapter sd = new SqlDataAdapter();
        sd.SelectCommand = new SqlCommand("select devid,data_time,data_value from CurrentTest", conn);
        sd.InsertCommand = new SqlCommand("insert into CurrentTest (devid,data_time,data_value) "
                        + " values (@devid,@data_time,@data_value);", conn);
        sd.InsertCommand.Parameters.Add("@devid", SqlDbType.Char, 18, "devid");
        sd.InsertCommand.Parameters.Add("@data_time", SqlDbType.Char, 19, "data_time");
        sd.InsertCommand.Parameters.Add("@data_value", SqlDbType.Int, 8, "data_value");
        sd.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
        sd.UpdateBatchSize = 0;    DataSet dataset = new DataSet();
        sd.Fill(dataset);
        Random r = new Random(1000);
        for (int i = 0; i < 100000; i++) ...{
            object[] row = ...{"DEVID"+i,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),r.Next(1,1000) };
            dataset.Tables[0].Rows.Add(row);
            if (i % 300 == 0) ...{
                sd.Update(dataset.Tables[0]);
                dataset.Tables[0].Clear();
            }
        }
        sd.Update(dataset.Tables[0]);
        dataset.Tables[0].Clear();
        sd.Dispose();
        dataset.Dispose();
        conn.Close();
       
    }
      

  3.   

    insert into t1 select * from t2;
    这样的语句用在t1,t2在同一个数据库中楼主从xml中读取的数据存在程序中的datatble中,要存到本地的数据库中,两张表在不同的数据库中,没法直接使用insert into t1 select * from t2如果要批量导入数据库,使用dataAdapter.update,避免使用大量的insert语句
      

  4.   

    c# 提交数据集的更改(插入动作)
    2009-04-01 05:07using System;
    using System.Data;
    using System.Data.SqlClient;namespace program
    {
        class wangjun
        {
            static void Main(string[] args)
            {
                //创建连接数据库对象字符串
                string connection = "server=.;database=wangjun;uid=sa;pwd=sqlserver";
                //创建连接数据库对象
                SqlConnection sc = new SqlConnection(connection);
                //创建数据集对象
                DataSet ds = new DataSet("wangjun");
                //创建数据集中表对象,表名为person
                DataTable dt = ds.Tables.Add("person");
                //创建数据适配器对象,使用select * from student
                SqlDataAdapter sda = new SqlDataAdapter("select * from student", sc);
                //适配器对象使用Fill方法填充ds数据集的person表
                sda.Fill(ds, "person");
                //使用person表的格式,新建一个新行
                DataRow r = ds.Tables["person"].NewRow();
                //在行中插入数据
                r["姓名"] = "大李";
                r["性别"] = "男";
                r["总分"] = 90;
                r["平时成绩"] = 100;
                r["address"] = "中国";
                r["所属院系"] = "软件开发";
                //将填写好的行加入person表中
                ds.Tables["person"].Rows.Add(r);
                //新建数据库命令对象
                SqlCommand cmd = sc.CreateCommand();
                //设置命令字符串
                cmd.CommandText = "insert into student(姓名,性别,总分,平时成绩,address,所属院系) values(@name,@sex,@fen,@cheng,@address,@yuanxi)";
                //添加命令对象的参数
                cmd.Parameters.Add("@name",SqlDbType.Char,10,"姓名");
                cmd.Parameters.Add("@sex",SqlDbType.Char,2,"性别");
                cmd.Parameters.Add("@fen",SqlDbType.Int,4,"总分");
                cmd.Parameters.Add("@cheng",SqlDbType.Int,4,"平时成绩");
                cmd.Parameters.Add("@address",SqlDbType.Char,20,"address");
                cmd.Parameters.Add("@yuanxi",SqlDbType.Char,20,"所属院系");
                //设置数据适配器插入命令
                sda.InsertCommand = cmd;
                //对ds数据集的person表进行更新
                sda.Update(ds.Tables[0]);
                //清除ds数据集表的内容
                ds.Tables[0].Clear();
                //使用数据适配器填充ds表
                sda.Fill(ds,"person");
            }
        }
    }僅做參考
      

  5.   

    我现在就想用 dataAdapter.update
    如何实现?多谢!
      

  6.   

    DataAdapter的Update是自动生成Insert之类的命令并执行,对数据库管理系统来说,并没有太大的区别。要考虑效率的话,只能从数据库管理系统自身来想办法。
      

  7.   

    不同数据库没法操作,你一个事DataTable,一个是物理表,sql中不行吧
      

  8.   

    SqlConnection thisConnection = new SqlConnection(
     @"Server=.;Integrated Security=True;" +
    "Database=northwind"); SqlDataAdapter thisAdapter = new SqlDataAdapter(
     "SELECT CustomerID, CompanyName FROM Customers where 1=2", thisConnection); SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter); DataSet thisDataSet = new DataSet();
    thisAdapter.Fill(thisDataSet, "Customers");
    DataRow thisRow = thisDataSet.Tables["Customers"].NewRow();
    thisRow["CustomerID"] = "ZAZI";
    thisRow["CompanyName"] = "Zachary Zithd.";
    thisDataSet.Tables["Customers"].Rows.Add(thisRow);
    thisAdapter.Update(thisDataSet, "Customers"); thisConnection.Close();
      

  9.   

    ASP.NET(C#)技术联盟高级群,欢迎工作中的朋友进来一起探讨并解决工作中遇到的问题!一群37078937(已满)二群37078867三群37078820(欢迎上海地区的朋友)
    严禁加多群,群定期清理长期不发言不讨论的朋友,请多包涵。