情况是这样的:把某表中的数据 WriteXml 到一个 xml 文件中,通过网络传输给另外一个程序,网络端那边返回执行成功后,将该 xml 文件 DataTable.ReadXml()  , 更新该 DataTable 中的 日期字段, 最后更新到导出源(原表)下面是代码:     public void ImportTableFromXml(string tableName, string filename)
        {
            DataTable dt = new DataTable();
            dt.ReadXml(filename);
            SqlDataAdapter sqlda = new SqlDataAdapter(string.Format("select * from {0}", tableName), SqlConn);
            SqlCommandBuilder scb = new SqlCommandBuilder(sqlda);
            sqlda.UpdateCommand = scb.GetUpdateCommand();
            sqlda.InsertCommand = scb.GetInsertCommand();
            sqlda.DeleteCommand = scb.GetDeleteCommand();            DataSet ds = new DataSet("dbDataSet");
            sqlda.Fill(ds);            foreach (DataRow row in dt.Rows)
            {
                row["exportDate"] = DateTime.Now;
            }
           
            ds.Tables.Clear();
            
            ds.Merge(dt);
                        DataTable update = dt.GetChanges(DataRowState.Modified); // datatable == null
            //sqlda.Update(update);            DataTable deletes = dt.GetChanges(DataRowState.Deleted); // datatable == null
            //sqlda.Update(deletes);
            DataTable inserts = dt.GetChanges(DataRowState.Added); // 只有这个 dataTable 不为 null
            //sqlda.Update(inserts);            //sqlda.Update(ds,tableName);
            //sqlda.Update(dt);        }
问:我这么写对不对, 有别的办法吗?

解决方案 »

  1.   

    自己搞定了, 要加入 dt.AcceptChanges(); 之后再 update 即可。
            public void ImportTableFromXml(string tableName, string filename)
            {
                DataTable dt = new DataTable();
                dt.ReadXml(filename);            SqlDataAdapter sqlda = new SqlDataAdapter(string.Format("select * from {0}", tableName), SqlConn);
                SqlCommandBuilder scb = new SqlCommandBuilder(sqlda);
                sqlda.UpdateCommand = scb.GetUpdateCommand();
                sqlda.InsertCommand = scb.GetInsertCommand();
                sqlda.DeleteCommand = scb.GetDeleteCommand();
                    
                DataTable odt = new DataTable(tableName);
                sqlda.Fill(odt);            dt.AcceptChanges();            foreach (DataRow row in dt.Rows)
                {
                    row["exportDate"] = DateTime.Now;
                }            odt.Clear();
                odt = dt.Copy();            DataTable update = odt.GetChanges(DataRowState.Modified);
                sqlda.Update(update);
            }