的确用DataSet.Merge就可以了(表的名字可以不同) MSDN中有现成的例子: 以下示例创建一个简单的 DataSet,该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable,二者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行,然后将该表合并到 DataSet(preserveChanges 参数设置为 false,missingSchemaAction 参数设置为 MissingSchemaAction.Add)中。 [C#] private void DemonstrateMergeTableAddSchema(){ // Create a DataSet with one table, two columns, and ten rows. DataSet ds = new DataSet("myDataSet"); DataTable t = new DataTable("Items"); // Add table to the DataSet ds.Tables.Add(t); // Create and add two columns to the DataTable DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"),""); c1.AutoIncrement=true; DataColumn c2 = new DataColumn("Item", Type.GetType("System.Int32"),""); t.Columns.Add(c1); t.Columns.Add(c2); // Set the primary key to the first column. t.PrimaryKey = new DataColumn[1]{ c1 }; // Add RowChanged event handler for the table. t.RowChanged+= new DataRowChangeEventHandler(Row_Changed); // Add ten rows. for(int i = 0; i <10;i++){ DataRow r=t.NewRow(); r["Item"]= i; t.Rows.Add(r); } // Accept changes. ds.AcceptChanges(); PrintValues(ds, "Original values"); // Create a second DataTable identical to the first, with // one extra column using the Clone method. DataTable t2 = t.Clone(); t2.Columns.Add("extra", typeof(string)); // Add two rows. Note that the id column can't be the // same as existing rows in the DataSet table. DataRow newRow; newRow=t2.NewRow(); newRow["id"]= 12; newRow["Item"]=555; newRow["extra"]= "extra Column 1"; t2.Rows.Add(newRow); newRow=t2.NewRow(); newRow["id"]= 13; newRow["Item"]=665; newRow["extra"]= "extra Column 2"; t2.Rows.Add(newRow); // Merge the table into the DataSet. Console.WriteLine("Merging"); ds.Merge(t2,false,MissingSchemaAction.Add); PrintValues(ds, "Merged With Table, Schema Added"); }private void Row_Changed(object sender, DataRowChangeEventArgs e){ Console.WriteLine("Row Changed " + e.Action.ToString() + "\t" + e.Row.ItemArray[0]); }private void PrintValues(DataSet ds, string label){ Console.WriteLine("\n" + label); foreach(DataTable t in ds.Tables){ Console.WriteLine("TableName: " + t.TableName); foreach(DataRow r in t.Rows){ foreach(DataColumn c in t.Columns){ Console.Write("\t " + r[c] ); } Console.WriteLine(); } } }
现在就想把这3张datatable表合并成1张新的datatable表(也就是说把这3张表的数据放到新的datatable表里面去,里面的数据没有重复的)
INSERT table_2
SELECT *
FROM table_1(把table_1的数据插入table_2)
3张datatable 合并1张新的datatable
MSDN中有现成的例子:
以下示例创建一个简单的 DataSet,该数据集包含一个表、两个列和十个行。创建了与第一个表几乎相同的第二个 DataTable,二者的区别在于向第二个表中添加了新的 DataColumn。向第二个表中添加两个行,然后将该表合并到 DataSet(preserveChanges 参数设置为 false,missingSchemaAction 参数设置为 MissingSchemaAction.Add)中。
[C#]
private void DemonstrateMergeTableAddSchema(){
// Create a DataSet with one table, two columns, and ten rows.
DataSet ds = new DataSet("myDataSet");
DataTable t = new DataTable("Items"); // Add table to the DataSet
ds.Tables.Add(t); // Create and add two columns to the DataTable
DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"),"");
c1.AutoIncrement=true;
DataColumn c2 = new DataColumn("Item", Type.GetType("System.Int32"),"");
t.Columns.Add(c1);
t.Columns.Add(c2); // Set the primary key to the first column.
t.PrimaryKey = new DataColumn[1]{ c1 }; // Add RowChanged event handler for the table.
t.RowChanged+= new DataRowChangeEventHandler(Row_Changed); // Add ten rows.
for(int i = 0; i <10;i++){
DataRow r=t.NewRow();
r["Item"]= i;
t.Rows.Add(r);
} // Accept changes.
ds.AcceptChanges();
PrintValues(ds, "Original values"); // Create a second DataTable identical to the first, with
// one extra column using the Clone method.
DataTable t2 = t.Clone();
t2.Columns.Add("extra", typeof(string)); // Add two rows. Note that the id column can't be the
// same as existing rows in the DataSet table.
DataRow newRow;
newRow=t2.NewRow();
newRow["id"]= 12;
newRow["Item"]=555;
newRow["extra"]= "extra Column 1";
t2.Rows.Add(newRow); newRow=t2.NewRow();
newRow["id"]= 13;
newRow["Item"]=665;
newRow["extra"]= "extra Column 2";
t2.Rows.Add(newRow); // Merge the table into the DataSet.
Console.WriteLine("Merging");
ds.Merge(t2,false,MissingSchemaAction.Add);
PrintValues(ds, "Merged With Table, Schema Added");
}private void Row_Changed(object sender, DataRowChangeEventArgs e){
Console.WriteLine("Row Changed " + e.Action.ToString() + "\t" + e.Row.ItemArray[0]);
}private void PrintValues(DataSet ds, string label){
Console.WriteLine("\n" + label);
foreach(DataTable t in ds.Tables){
Console.WriteLine("TableName: " + t.TableName);
foreach(DataRow r in t.Rows){
foreach(DataColumn c in t.Columns){
Console.Write("\t " + r[c] );
}
Console.WriteLine();
}
}
}
未处理的“SystemFramework.ExceptionManagement.LogonException”类型的异常出现在 wak.uky.dll 中。其他信息: 未将对象引用设置到对象的实例
==========================================
这是这什么错误?
DataSet ds = new DataSet("myDataSet");
DataTable t = new DataTable("Items");
ds.Tables.Add(t);
DataColumn c1 = new DataColumn("id", Type.GetType("System.Int32"),"");
c1.AutoIncrement=true;
DataColumn c2 = new DataColumn("Item", Type.GetType("System.Int32"),"");
t.Columns.Add(c1);
t.Columns.Add(c2);
注意按照你的表结构来构造新的DataTable,构造完毕后可调用ds.Merge(datatable,false,MissingSchemaAction.Add)方法,应该可以把你的三个表合并到一起了。
表1是dt1
表2是dt2
表3是dt3
this.myds = new DataSet();
myds.Merge(this.dt1,false,MissingSchemaAction.Add);
myds.Merge(this.dt2,false,MissingSchemaAction.Add);
myds.Merge(this.dt3,false,MissingSchemaAction.Add);
那到是 this.myds.Tables[0].TableName; 吗?
表2是dt2
表3是dt3
this.myds = new DataSet();
myds.Merge(this.dt1,false,MissingSchemaAction.Add);
myds.Merge(this.dt2,false,MissingSchemaAction.Add);
myds.Merge(this.dt3,false,MissingSchemaAction.Add);
是不是合并后的数据是在myds里面,那么怎样取合并后的数据呢?
this.myds.Tables[用表名访问]这只是取某个表而已?我要取的是合并后的数据