先用oledb把数据传入DataTable,然后用SqlClient的SqlDataAdapter递交DataTable  试试看呢  ^_^

解决方案 »

  1.   

    DataTable tb1 = ...;//从access读出
    DataTable tb2 = ...;//从sql读出;
    foreach(DataRow dr in tb1.Rows)
       tb2.Rows.Add(dr.ItemArray);yourDataAdapter.Update(tb2);
      

  2.   

    //assume you have retrieved the data From Access DataSource 
    //and loaded its into a DataTable(AccessOrderDt)
    //assuming relatively table's name of SqlServer is SqlOrder//in the sqlOrder Table you should include a primary Key
    SqlCommand comd = new SqlCommnd("select f1,f2,.. from SqlOrder where 1=0",yourSqlConnObj);
    SqlDataAdapter adp = new SqlDataAdapter(comd);DataTable SqlOrderDt = new DataTable();
    adp.Fill(SqlOrderDt);DataRow tempDr;
    foreach(DataRow dr in AccessOrderDt.Rows)
    {
     tempDr = SqlOrderDt.NewRow();
     tempDr[f1] = dr["id"];
     tempDr[f2] = dr["pono"];
     //set the other columns value here
    }SqlOrderDt.AcceptChanges();
    adp.update();
      

  3.   

    string Sql = "SqlServer查询";
    string Sql1 = "Access查询";
    SqlCommand cmd1 = new SqlCommand(Sql);
    da.SelectCommand = cmd1;
    DataSet ds = new DataSet;
    DataTable NewSqlServer;
    da = new SqlDataAdapter(SqlNewTable,Conn1);
    da.Fill(ds,"SqlServer表");
    ServerTable = ds.Tables["SqlServer表"];//得到表结构
    cmd1 = new SqlCommand(Sql1);
    da.SelectCommand = cmd1;
    DataTable ATable;
    da = new SqlDataAdapter(ds,Conn1);
    da.Fill(ds,"Access表");
    ATable = ds.Tables["ATable"];//得到Access数据库表的数据
    if(ATable.Rows.Count != 0)
    {
    DataRow NewRow;
    for(int i=0;i<ATable.Rows.Count;i++)
    {
    NewRow = NewSqlServer.NewRow();
    NewRow["ID"] = ATable.Rows[i]["ID"];
    NewRow["PONO"] = ATable.Rows[i]["PONO"];
    NewSqlServer.Rows.Add(NewRow);
    }
    }
    //在这里写入你的insert语句可以是一个存储过程;
    da.InsertCommand = cmd;
    da.Update(NewSqlServer);
    da.Dispose();
    da = null;
    Conn1.Close();
    Conn1.Dispose();
      

  4.   

    swiminfish(纸飞机) 这种方法我试过了。。用DATASET也不行的。因为是用两个不同的COMMANDBUILDER,他们不能检测到数据前后有什么变化的。
      

  5.   

    你看看我的方法可以不?给我个回答.
    建议你不要用COMMANDBUILDER而自己写SQL语句.
      

  6.   

    你的方法,我看不明白。ServerTable 是什么来着?是参数,还是其他什么的?好象复制了表的结构也没有用过?
      

  7.   

    现在我用DATAREADER解决了问题。。利用两个表之间ID的差数,利用OBJREADER.READE()来把每个字段逐个逐个地读出来然后INSERT到SQL DATABASE里面去。也是挺快的。
      

  8.   

    哦!
    serverTable其实呵呵写错了,应该是NewSqlServer代表的是你从SqlServer数据库中得到的DataTable
    ATable则代表你从Access数据库中得到的DataTable
    由于两个数据库中的结构和字段类型一样,所以可以用DataRow来添加
    最后使用DataAdapter的update方法把新添加的数据一次推入数据库中
    你用的方法要考虑数据库连接次数问题,如果次数过多sqlserver也许会崩溃.