复制DataTable的一种方法

      如果将程序返回的DataTable加入到自己定义的一个DataSet中,直接用ds.Tables.Add(dt)的方法,就会出现“该DataTable已属于另外一个DataSet”的错误。这时候我们需要建一个新的DataTable,并将原来的DataTable的结构及数据导入到新的DataTable中,这时候就可以使用下面的方法(当然方法并不是唯一的):


/// <summary>
        
/// 复制DataTable
        
/// </summary>
        
/// <param name="copyDt">数据源</param>
        
/// <param name="tableName">新DataTable名称</param>
        
/// <returns>复制后的DataTable</returns>

        private DataTable CopyDataTable(DataTable copyDt, string tableName)
        
{
            DataTable dt 
= new DataTable(tableName);
            
foreach (DataColumn columm in copyDt.Columns)
            
{
                dt.Columns.Add(columm.ColumnName,columm.DataType);
            }


            
foreach (DataRow row in copyDt.Rows)
            
{
                dt.BeginInit();
                dt.ImportRow(row);
                dt.EndInit();
            }


            
return dt;
        }

posted on 2007-03-07 18:49 Daniel Pang 阅读(2324) 评论(7)  编辑 收藏 网摘 所属分类: ASP.NET2.0ASP.NET1.1

评论

#1楼 2007-03-15 14:50 南疯      

我注意到你的发表日期是2007-04-07
要是我,打死我都不会这样做!
我情愿用DataTable.Copy()的方法。
  回复  引用  查看    

#2楼[楼主] 2007-03-15 21:49 Daniel Pang      

@南疯
我是新建一个DataSet,然后将前面代码返回的多个DataTable组合到这个DataSet中去,如果用你说的那种方法,会出现“该表已属于另一个DataSet”的错误
  回复  引用  查看    

#3楼 2007-03-18 14:40 南疯      

你说的情况我也碰过,DataTable.Copy()得到的结果(可能)是不带有原来所属的DataSet的,你可以试试看。如果还是带有原来是DataSet,那么,你还可以把DataTable.DataSet=null来处理,然后再Add到你的新DataSet中。
还有,结构的拷贝也不需要循环处理的,直接使用DataTable.Clone()即可。
  回复  引用  查看    

#4楼[楼主] 2007-03-21 10:15 Daniel Pang      

@南疯
DataTable.DataSet是只读属性,不可以像你所说的DataTable.DataSet=null这样来设置。
  回复  引用  查看    

#5楼 2007-08-24 00:10 Keely[未注册用户]

正确方法:ds.Tables.Add(dt.Copy())   回复  引用    

#6楼 2008-03-14 10:28 chris007[未注册用户]

public DataTable Copy()
{
DataTable table2;
IntPtr ptr;
Bid.ScopeEnter(out ptr, "<ds.DataTable.Copy|API> %d#\n", this.ObjectID);
try
{
DataTable table = this.Clone();
foreach (DataRow row in this.Rows)
{
this.CopyRow(table, row);
}
table2 = table;
}
finally
{
Bid.ScopeLeave(ref ptr);
}
return table2;
}

其实想法类似。
  回复  引用    

#7楼 2009-04-24 11:16 Everlonely      

DataTable dt = ds2.Tables(0)
ds2.Tables.Remove(dt)

ds1.Tables.Add(dt)
  回复  引用  查看    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 667136 jq04DUEmSmU=



相关文章:

相关链接:
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

公告

技术交流平台,真诚的希望能和园子里的朋友交流技术,共同进步!
欢迎加入Castle+IBatisNet交流群:2923364(已满),37745404
特别提示:本站文章若无特别申明,均为原创,转载请注明出自'博客园'!
Emailpwei013#163.com
MSNshypw520#gmail.com

与我联系

搜索

 

常用链接

留言簿

我参与的团队

随笔分类(98)

随笔档案(74)

相册

收藏夹(19)

MY BLOG

公司主页

情侣BLOG

友情链接

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜