cmd.CommandText = "select top 5 * from sysuser";DataTable dt1 = new DataTable();
dt1.PrimaryKey = new DataColumn[] { dt1.Columns["sysuserid"] };
ada.Fill(dt1);
dt1.AcceptChanges();cmd.CommandText = "select top 15 * from sysuser";
DataTable dt2 = new DataTable();
ada.Fill(dt2);
dt2.PrimaryKey = new DataColumn[] { dt2.Columns["sysuserid"] };
dt2.AcceptChanges();dt1.Merge(dt2);DataTable dt3 = dt1.GetChanges();
为什么dt3为null?不是往dt1中添加了新数据了吗?我在执行MSDN上的样例时是有效的,但为什么我从数据库中获取就无效?我想通过该方法比较两个DataTable(一新一旧)的结构及其数据的不同处,然后在DataView中标记出来。
http://msdn.microsoft.com/zh-cn/vsts2008/system.data.datatable.merge.aspx
{
DataTable table1 = new DataTable("Items"); // Add columns
DataColumn idColumn = new DataColumn("id", typeof(System.Int32));
DataColumn itemColumn = new DataColumn("item", typeof(System.Int32));
table1.Columns.Add(idColumn);
table1.Columns.Add(itemColumn); // Set the primary key column.
table1.PrimaryKey = new DataColumn[] { idColumn }; // Add RowChanged event handler for the table.
table1.RowChanged += new
System.Data.DataRowChangeEventHandler(Row_Changed); // Add ten rows.
DataRow row;
for (int i = 0; i <= 9; i++)
{
row = table1.NewRow();
row["id"] = i;
row["item"] = i;
table1.Rows.Add(row);
} // Accept changes.
table1.AcceptChanges();
PrintValues(table1, "Original values"); // Create a second DataTable identical to the first.
DataTable table2 = table1.Clone(); // Add column to the second column, so that the
// schemas no longer match.
table2.Columns.Add("newColumn", typeof(System.String)); // Add three rows. Note that the id column can't be the
// same as existing rows in the original table.
row = table2.NewRow();
row["id"] = 14;
row["item"] = 774;
row["newColumn"] = "new column 1";
table2.Rows.Add(row); row = table2.NewRow();
row["id"] = 12;
row["item"] = 555;
row["newColumn"] = "new column 2";
table2.Rows.Add(row); row = table2.NewRow();
row["id"] = 13;
row["item"] = 665;
row["newColumn"] = "new column 3";
table2.Rows.Add(row); // Merge table2 into the table1.
Console.WriteLine("Merging");
table1.Merge(table2, false, MissingSchemaAction.Add);
PrintValues(table1, "Merged With table1, schema added");}private static void Row_Changed(object sender,
DataRowChangeEventArgs e)
{
Console.WriteLine("Row changed {0}\t{1}", e.Action,
e.Row.ItemArray[0]);
}private static void PrintValues(DataTable table, string label)
{
// Display the values in the supplied DataTable:
Console.WriteLine(label);
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
Console.Write("\t " + row[col].ToString());
}
Console.WriteLine();
}
}
是可以取出新加入的数据的,我的只是和它的数据来源不一样,为什么就不可以了呢?
DataTable dt1 = new DataTable();
dt1.Columns.Add("id");
dt1.Columns.Add("name");
dt1.Columns.Add("pwd");
for (int i = 0; i < 5; i++)
{
dt1.Rows.Add(new object[] { i.ToString(), "name" + i.ToString(), "" });
}
DataTable dt2 = new DataTable();
dt2.Columns.Add("id");
dt2.Columns.Add("name");
dt2.Columns.Add("pwd");
for (int i = 5; i < 10; i++)
{
dt1.Rows.Add(new object[] { i.ToString(), "name" + i.ToString(), "" });
}
DataTable dt3 = null;
dt3 = dt1.Clone();
if (dt3 != null)
{
dt3.Merge(dt1);
dt3.Merge(dt2);
}
dt1.PrimaryKey = new DataColumn[] { dt1.Columns["sysuserid"] };
ada.Fill(dt1);
dt1.AcceptChanges();cmd.CommandText = "select top 15 * from sysuser";
DataTable dt2 = new DataTable();
ada.Fill(dt2);
dt2.PrimaryKey = new DataColumn[] { dt2.Columns["sysuserid"] };
dt2.AcceptChanges();--这个时候你将dt2的表结束编辑了。所有dt2的数据(row)都是unchange状态
dt1.Merge(dt2);
--再merge进来还是unchange啊。merge的时候是会将状态也保持的
DataTable dt3 = dt1.GetChanges();