強類型數據集多結果表名稱映射
DataSet_EquSalerecord dtsSales = new DataSet_EquSalerecord(); adapter = new System.Data.SqlClient.SqlDataAdapter( new System.Data.SqlClient.SqlCommand() { CommandText = "pJSKJ_Data_XSJL", CommandType = System.Data.CommandType.StoredProcedure, Connection = sqlConn }); adapter.TableMappings.Add("Table", "basedata"); adapter.TableMappings.Add("Table1", "entity"); adapter.Fill(dtsSales);
C#中DataSet、DataTable、DataRow數據的複製方法
DataSet對象是支持ADO.NET的斷開式、分佈式數據方案的核心對象,用途非常廣泛.我們很多時候需要使用其中的數據,比如取得一個DataTable的數據或者複製另一個DataTabe中的數據...
DataSet 對象是支持 ADO.NET的斷開式、分佈式數據方案的核心對象 ,用途非常廣泛.我們很多時候需要使用其中的數據,比如取得一個DataTable的數據或者複製另一個DataTabe中的數據或者是DataRow的數據,但是隻有DataSet和DataTable的複製是支持深層複製的,就是說不僅能複製元素的結構,而且能複製元素的數據,而DatatDataRow沒有相關的複製的方法,下面將簡單介紹下這些數據元素的複製問題。
- DataTable sourceTable;
- DataTable objectTable;
- DatatDataRow sourceRow;
- DatatDataRow objectRow;
- DataRow tempRow;
- DataSet souceDataSet = new DataSet();
複製DataSet
- DataSet object = souceDataSet.Copy();//深複製
- DataSet object = souceDataSet.Clone();//淺複製,只複製架構
複製DataTable
- objectTable = sourceTable .Copy();//深複製
- objectTable = sourceTable .Clone();//淺複製,只複製架構
複製DataRow
那我們應該如何複製DataRow的數據了,下面將着重介紹幾種方法
1、ImportDataRow方法:
- public void ImportDataRow( DataRow DataRow);
- objectTable = sourceTable.clone();//必須先複製表的架構,使具有相同的的列或關係!
- foreach (DataRow oRow in sourceTable)
- {
- objectTable.ImportDataRow(oRow);//在objectTable中添加一個新行,並將sourceRow的值複製進去,要求表的結構一樣!
- }
2、自定義複製
- objectTable.Columns.Add ("id");//不需要有一樣的架構,只複製自己需要的列!
- Object [] myArry = new Object [1];
- foreach (DataRow oRow in sourceTable)
- {
- tempRow = objectTable.NewRow();//此方法必須調用!
- myArry[0] = oRow["id"];//如果myArry中沒有源表中的id列的話就會報錯!
- tempRow.ItemArray = myArry;//ItemArray屬性爲Object類型數組,根據程序的需要需要可自行復制多個列的數據!
- objectTable.Rows.Add(tempRow); //此方法必須調用,否則DataRow中的數據將不能顯示!
- }
3、LoadDataRow方法:
- public DataRow LoadDataRow(Object[] values,bool fAcceptChanges);
- Object[] newRow = new Object[3];
- // 設置對象數組的值
- newRow[0] = "Hello";
- newRow[1] = "World";
- newRow[2] = "two";
- DataRow myRow;
- ObjectTable.BeginLoadData();
- // 將新行添加到表中
- myRow = ObjectTable.LoadDataRow(newRow, true);//標誌要設置爲true,表示添加新行
- ObjectTable.EndLoadData();
該方法比較複雜,如果只是簡單的複製現有行的數據來添加新行的話建議不要採用,具體用法請參看sdk文擋。
DataRow的複製
如果直接通過RequirDT.Rows.Add(row),則運行時會出現"該行已經屬於一個表"的提示錯誤!至於其中的原因,通過DataSet和DataTable類比,從通常意義來說應該不會出現錯誤提示,但是細細想來,我覺得應該是由於DataTable的架構設計所致,借鑑關係數據庫中的關係表,datacolumn定義了DataTable的整體架構,而具體的datarow是符合該架構的一條記錄罷了!所以具有該架構的行只能添加到具有相同架構的表中!同時RequireDT.Rows.Add()實現捕獲 System.ArgumentException(The row ther belongs to another table or ready belongs to this table.)我想其實現也限制了不能通過該方法實現!
鑑於以上
1.ImportRow方法
- DataTable RequireDT = SourceDT.Clone();
- RequireDT.ImportRow(row);
2.見網上有這樣實現的
- RequireDT.Rows.Add(row.ItemArray)
但是我編寫代碼並不能實現,該函數的功能是Creates a row using specified values and adds it to the System.Data.DataRowCollection。所以也需要先拷貝源數據表的結構,方可成功!
3. 以下方法也可以實現,但是也得先複製表的結構
- ObjectTable.BeginLoadData();
- myRow = ObjectTable.LoadDataRow(newRow, true);
- ObjectTable.EndLoadData();
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。