XML 文件:
<?xml version="1.0" encoding="GB2312"?> 
<Test>
  <Test1> 
   <UID>4</UID> 
   <UName>sa1</UName>
   <Birthday>2007-09-17 18:52:00</Birthday>
  </Test1> 
  <Test1> 
   <UID>5</UID> 
   <UName>sa2</UName>
   <Birthday>2007-09-18 18:52:00</Birthday>
  </Test1> 
  <Test1> 
   <UID>6</UID> 
   <UName>sa3</UName>
   <Birthday>2007-09-19 18:52:00</Birthday>
  </Test1> 
</Test>
private void button2_Click(object sender, EventArgs e)
        {
            string com;
            com = "Provider=Sybase.ASEOLEDBProvider.2;Initial Catalog=bsjdw0;User ID=sa;Password=;Server Name=SERVER;Network Protocol=Winsock;Server Port Address=5000 providerName=System.Data.OleDb";            System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(com);
            
            try
            {       
              
                conn.Open();
                string sql = "select * from Test";
                System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                ds.Tables.Add("Test");
                da.Fill(ds.Tables["Test"]);
                DataSet ds2 = new DataSet();
                ds2.ReadXml(@"d:\test.xml");
                DataTable dt = ds2.Tables["Test"];                //dt.PrimaryKey = new DataColumn[] { dt.Columns[0] };
                //ds.Tables["Test"].PrimaryKey = new DataColumn[] { ds.Tables["Test"].Columns[0] };                ds.Tables["Test"].Merge(dt, true, MissingSchemaAction.Ignore);//关键所在,合并两个ds到一张表中
                this.dataGridView1.DataSource = ds.Tables["Test"];
              OleDbCommandBuilder oleb = new OleDbCommandBuilder(da);                if (ds.Tables["Test"].GetChanges() != null)
                {
                    da.Update(ds.Tables["Test"]);
                    ds.AcceptChanges();//真正的更新数据库 调用 ds.RejectChanges() 取消更新。
                       MessageBox.Show("更新成功!");
                }
                else
                    MessageBox.Show("更新失败!");
                conn.Close();
            }
            catch (Exception ex)
            {
                conn.Close();
                MessageBox.Show(ex.Message);
            }
        }

解决方案 »

  1.   

    给数据库表test设置主键 例如将UID设置为主键
      

  2.   

    用access测试的 代码和你的没什么差别 private void Form1_Load(object sender, EventArgs e)
    {
      DataSet ds1 = new DataSet();
                    
      string connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\Administrator\桌面\db1.mdb";
      conn = new OleDbConnection(connstr);
      string sqlstr = "SELECT * from table1 ";
      da = new OleDbDataAdapter(sqlstr, conn);
      ds = new DataSet();
      da.Fill(ds, "table1");
      ds1.ReadXml(@"C:\Documents and Settings\Administrator\桌面\ds.xml");
      dt = ds1.Tables[0];
      ds.Tables[0].Merge(dt,true,MissingSchemaAction.Ignore);
      OleDbCommandBuilder dcmdb = new OleDbCommandBuilder(da);
    }private void BtnUpdate_Click(object sender, EventArgs e)
    {
      try
      {
        da.Update(ds.GetChanges(), ds.Tables[0].ToString());
      }
      catch
      {
                  
      }
    }