DataSet 和 DataTable 问题

htw_qq 2005-10-22 08:41:59
我有两个数据访问层的方法,分别返回两个 DataTable ,

一个DataTable 是查询的人的基本信息, 比如: playerid 张三 男 22岁
另一个DataTable 是查询人报的项目名称 比如: playerid 100米 200米

要得到的效果: 张三 男 22岁 100米 200米

我要在业务层把两个DataTable 合成一个,因为在界面层只能接受一个DataTable 或 DataSet
...全文
223 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
marvelstack 2005-10-24
  • 打赏
  • 举报
回复
建议使用Ado.net下的表达式来实现你需要的功能,
http://www.microsoft.com/china/MSDN/library/data/dataAccess/ADONETEXP.mspx
huang1023 2005-10-23
  • 打赏
  • 举报
回复
private DataTable GetMergedTable(DataTable table1, DataTable table2)
{
DataTable mergedTable = CreateMergedTable();

foreach (DataRow arow in table1.Rows)
{
string playerId = arow["PlayerId"].ToString();
DataRow brow = table2.Rows.Find(playerId);

if (brow != null)
{
DataRow newRow = mergedTable.NewRow();
newRow["PlayerId"] = playerId;
newRow["Name"] = arow["Name"].ToString();
newRow["Sex"] = arow["Sex"].ToString();
newRow["Age"] = arow["Age"].ToString();
newRow["Length1"] = brow["Length1"].ToString();
newRow["Length1"] = brow["Length2"].ToString();
}
}

return mergedTable;
}

private DataTable CreateMergedTable()
{
DataTable table = new DataTable();
DataColumnCollection columns = table.Columns;

columns.Add("PlayerId", typeof(System.Int32));
columns.Add("Name", typeof(System.String));
columns.Add("Sex", typeof(System.String));
columns.Add("Age", typeof(System.String));
columns.Add("Length1", typeof(System.String));
columns.Add("Length2", typeof(System.String));

table.PrimaryKey = new DataColumn[] {columns["PlayerId"]};

return table;
}
parol2910 2005-10-23
  • 打赏
  • 举报
回复
把两张datatable起不同的名,然后放到一个dataset中,最后返回dataset
htw_qq 2005-10-23
  • 打赏
  • 举报
回复
To: huang1023(啊邦)

你说的思路我也想过,但是不知道怎么实现?能帮忙写点测试代码吗?
htw_qq 2005-10-23
  • 打赏
  • 举报
回复
谢谢各位的参与,我的问题是没有办法把两个数据集连接起来。

前一个 DataTable 已经是从视图(三个表)查询出来的,上面的张三我只是举个例子;
第二个 DataTable 是程序中动态生成的临时表,然后查询出临时表的数据,是通过SQL编程来实现的。

其实我把这个临时表建在数据库中,通过SQL编程来给这个表添数据,再把这个表跟前面的表一起做成视图也是可行的,但是这样就在数据库中留下了一个没有用的表了,也比较麻烦。如果有办法把两个 DataTable 合在一起就什么问题都解决了,请大家多提思路啊!
huang1023 2005-10-22
  • 打赏
  • 举报
回复
给楼主一个思路,不知道可不可以接受:生成一个DataTable,把前面两个表的数据对应起来然后白拷贝到新的DataTable里,
huang1023 2005-10-22
  • 打赏
  • 举报
回复
楼上的好像误解了贴主的意思了。贴主说的前提是这两个表已存在于内存中,这时他想把两个表连接起来得到他想要的结果,而不这个两表在数据库系统,然后用一条sql查询语句连接取得结果。这个问题我以前也想到过,我想微软应该在他的ADO.NET框架里边即在DataSet里边支持至一部分sql的查询语句(如连接),这样的话意义应该很大。实际在数据库设计中一个对像的信息我们往往不是放在一个表里边边而多个表里边,
swans 2005-10-22
  • 打赏
  • 举报
回复
啊.数据库知识.....
singlepine 2005-10-22
  • 打赏
  • 举报
回复
那你怎么不直接在数据层返回一个包含张三 男 22岁 100米 200米的dataset呢,用sql语句关联查询就可以得到

string sql="select a.性命,a.性别,a.年龄,b.一百米,b.二百米 from 基本信息 a left join 人报的项目名称 b on a.playerid=b.playerid"
singlepine 2005-10-22
  • 打赏
  • 举报
回复
那你怎么不直接在返回一个包含张三 男 22岁 100米 200米的dataset呢,用sql语句关联查询就可以得到

string sql="a.性命,a.性别,a.年龄,b.一百米,b.二百米 from 基本信息 a left join 人报的项目名称 b on a.playerid=b.playerid"

110,538

社区成员

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

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

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