zoukankan      html  css  js  c++  java
  • DataSet、DataTable、DataRow 复制

    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

         项目开发中经常遇到这种错误-“此行已属于另一个表” 。导致这个错误的语句如下:

         objectTable .Rows.Add(SourceDataRow);


           分析了一下原因,因为DataRow DataTable 都是传引用调用的。所以一个行在一个表中了,就不能再增加到另外一个表。


    具体方法:


    1 ImportRow方法:public void ImportRow( DataRow DataRow);

    objectTable = sourceTable.clone();//必须先复制表的架构,使具有相同的的列或关系! 
    foreach (DataRow oRow in sourceTable) 
    {

            objectTable.ImportRow(oRow);//在objectTable中添加一个新行,并将sourceRow的值复制进去,要求表的结构一样!

    }

    _____________________________________________________________________________________________________

    2. 循环DataTable的每个列

    DataRow aDataRow = objectTable.NewRow();

        foreach(DataColumn aDataColumn in sourceTable.Columns)

        {

            aDataRow [aDataColumn.ColumnName] = sourceTable[i][aDataColumn.ColumnName];

        }

         objectTable.Rows.Add(aDataRow);

    3. 自定义复制

    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中的数据将不能显示!


    _____________________________________________________________________________________________________

    4. 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文挡。

  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/dudg/p/3208342.html
Copyright © 2011-2022 走看看