如何将多个DataTable添加到指定的DataSet中

zhu4139365 2009-03-19 11:23:24
如何将多个DataTable添加到指定的DataSet中
DataSet ds = new DataSet();//创建数据集
DataTable dt1 = new GetEmployeeInfo();//获取员工信息表
DataTable dt2 = new GetCustomerInfo();//获取客户信息表
ds.Tables.Add(dt1);//出错,dt1已经属于另外一个DataSet;

请问:如何将dt1和dt2添加到ds中呢?
...全文
1608 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
OObigO 2012-10-23
  • 打赏
  • 举报
回复

DataSet ds = new DataSet();
table1.TableName="tableName";
ds.Tables.Add(table1);
代码打字员 2011-10-25
  • 打赏
  • 举报
回复
怎么在DataSet中添加多个DataTable?如何将多个DataTable添加到指定的DataSet中

事件起因:从数据库中,查询多个dataTable,现在想一下子返回多个table,所以就想到用DATASET,遇到下面的两个现象,现在记录下,做个参考。
DataSet ds = new DataSet();//创建数据集

DataTable dt1 = BIZ. GetSalesInfo();//获取出售信息表

DataTable dt2 = BIZ. GetStockInfo();//获取仓库信息表

现象一:
用ds.Tables.Add()方法,老是提示"Table"已经存在,

ds.Tables.Add(dt1);//出错,dt1已经属于另外一个DataSet;

解决对策:

DataTable是通过引用方式使用的,所以一个table不能添加到另一个dataset中。开始是用最原始的建临时表的方法,后来发现发现table有copy方法,这样就省事多了,代码可以写成:

DS.Tables.Add(DT.Copy())

这样就OK了!


现象二:

已经存在DataTable;ds.Tables.Add(dt2.copy());//添加第二个Table时就出错了,已经存在DataTable;,于是第一种处理办法,不行,还得找其他办法给table 取名再插 于是代码便成这样

dt1.TableName="dt1n";

ds.Tables.Add(dt1);

dt2.TableName="dt2n";

ds.Tables.Add(dt2);



本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/net/c/20101103/9456.html
jian436 2011-07-18
  • 打赏
  • 举报
回复
Database db = DatabaseFactory.CreateDatabase(SR.DefaultDbInstance);
DataSet ds = new DataSet();
DbCommand cmdQueryItem = db.GetSqlStringCommand("select * from table");
db.LoadDataSet(cmdQueryItem, ds, "Item");
南哥1207 2009-03-19
  • 打赏
  • 举报
回复
Fill("表名")
zhu4139365 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 Dobzhansky 的回复:]
tb = tb2.Copy()
tb.TableName = "lll";
ds.Tables.Add(tb);
[/Quote]
谢谢你,你的回答已经帮我解决问题了,非常感谢。
zhu4139365 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lxf2000104 的回复:]
引用 9 楼 zhu4139365 的回复:
引用 5 楼 lxf2000104 的回复:
给表取个名字

有点笨了,不知道怎么在DataSet中给DataTable添加表名

代码都给出了??7楼代码都给出了
DataSet ds = new DataSet();
DataTable dt1 = this.TestData;
DataTable dt2 = this.TestData;
dt2.TableName = "province2"; //取个新的表名,我之前已经说了。
ds.Tables.Add(dt1.Copy());//

[/Quote]
谢谢你,根据你的回答,问题已经解决了。谢谢
zhu4139365 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lxf2000104 的回复:]
DataSet ds = new DataSet(); 
DataTable dt1 = this.TestData;
DataTable dt2 = this.TestData;
dt2.TableName = "province2";
ds.Tables.Add(dt1.Copy());//这样可以添加成功

ds.Tables.Add(dt2.Copy());//添加第二个Table时就出错了,已经存在DataTable;

}

/// <summary>
/// 测试数据源
/// </summary>
private DataTable TestData…
[/Quote]
谢谢。
DataSet.Tables.Add(DataTable.Copy());/*这个方法是可用的,只是我在往DataSet里添加前没有给两个Table设置Name,
所以在添加第二个的时候就会报Table已经存在*/

非常感谢!!!
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
只是注释没有去掉而已
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhu4139365 的回复:]
引用 5 楼 lxf2000104 的回复:
给表取个名字

有点笨了,不知道怎么在DataSet中给DataTable添加表名
[/Quote]
代码都给出了??7楼代码都给出了
DataSet ds = new DataSet();
DataTable dt1 = this.TestData;
DataTable dt2 = this.TestData;
dt2.TableName = "province2"; //取个新的表名,我之前已经说了。
ds.Tables.Add(dt1.Copy());//
ds.Tables.Add(dt2.Copy());//就不报错了啊
lchh0917 2009-03-19
  • 打赏
  • 举报
回复
关注,学习~
rx78gp01 2009-03-19
  • 打赏
  • 举报
回复
请给出完整代码
zhu4139365 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fiveandfive 的回复:]
应该是你在
new GetEmployeeInfo()
时返回的datatabel都可以是指向了同一个,
如果是你最好能修改一下.
[/Quote]
这两个方法在不同的类文件中,不好修改。
Dobzhansky 2009-03-19
  • 打赏
  • 举报
回复
tb = tb2.Copy()
tb.TableName = "lll";
ds.Tables.Add(tb);
Dobzhansky 2009-03-19
  • 打赏
  • 举报
回复
给table 取名再插啊啊
zhu4139365 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lxf2000104 的回复:]
给表取个名字
[/Quote]
有点笨了,不知道怎么在DataSet中给DataTable添加表名
zhu4139365 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 EveryCase 的回复:]
填充数据集。参考fill()方法!
[/Quote]
我的GetEmployeeInfo()和GetCustomerInfo()方法返回的直接就是DataTable了,
如果要填充的话,就要改SqlHelperExtension()方法了。
有没有其他的办法?
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
DataSet ds = new DataSet();
DataTable dt1 = this.TestData;
DataTable dt2 = this.TestData;
dt2.TableName = "province2";
ds.Tables.Add(dt1.Copy());//这样可以添加成功

ds.Tables.Add(dt2.Copy());//添加第二个Table时就出错了,已经存在DataTable;

}

/// <summary>
/// 测试数据源
/// </summary>
private DataTable TestData
{
get
{
DataTable dt = new DataTable("province");
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));

dt.Rows.Add(new object[] { 1, "湖北" });
dt.Rows.Add(new object[] { 2, "江苏" });
dt.Rows.Add(new object[] { 3, "浙江" });
dt.Rows.Add(new object[] { 4, "黄冈" });
return dt;
}
}
fiveandfive 2009-03-19
  • 打赏
  • 举报
回复
应该是你在
new GetEmployeeInfo()
时返回的datatabel都可以是指向了同一个,
如果是你最好能修改一下.
lxf2000104 2009-03-19
  • 打赏
  • 举报
回复
给表取个名字
EveryCase 2009-03-19
  • 打赏
  • 举报
回复
填充数据集。参考fill()方法!
加载更多回复(3)

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧