子从表结构,怎么一起读到一个控件当中

ivanlw 2012-10-12 10:51:06
比如说表A是组名,表B是组内成员的名单
表A:
1 A组
2 B组
表B(第二个字段是所属组的ID):
1 1 学生1
2 1 学生2
3 1 学生3
4 2 学生4
5 2 学生5

现在想在控件当中把他们一起显示出来:
A组 学生1,学生2,学生3
B组 学生4,学生5

如果是单独的表没问题:
mysqlconnection conn = new mysqlconnection(string);
conn.open();
mysqlcommand cmd = conn.createcommand();
cmd.commandtext = "";
mysqldatareader reader = cmd.executereader();
while(reader.read())
{
//读表A的内容
}

现在想在每次的while里面再建一个commandd和reader读出组内的所有成员,但是提示好像已经打开一个reader,不能有第二个同时存在了,改咋办呢?
...全文
132 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不需要用datareader,直接用adpter获得下面的数据,结果集放到datatable中,这样只需要连接一次获取数据。
1 1 学生1 A组
2 1 学生2 A组
3 1 学生3 A组
4 2 学生4 B组
5 2 学生5 B组
然后就可以从这个数据中获取分组和每个分组的数据了

DataTable dt = new DataTable();

dt.Columns.Add("Id");
dt.Columns.Add("Name");
dt.Columns.Add("Group");

dt.Rows.Add("1", "name1", "1");
dt.Rows.Add("2", "name2", "1");
dt.Rows.Add("3", "name3", "2");

dt.Rows.Add("4", "name4", "2");

// 获得分组为1的数据
DataRow[] result2 = dt.Select("Group=1");

// 获得各个分组数据
IEnumerable<IGrouping<string, DataRow>> result = dt.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr["Group"].ToString());
八哥Jerry 2012-10-12
  • 打赏
  • 举报
回复
楼上正确。
fujialin2011 2012-10-12
  • 打赏
  • 举报
回复
表A是组名,表B是组内成员的名单
表A:
aid aname
1 A组
2 B组
表B(第二个字段是所属组的ID):
bid aid bname
1 1 学生1
2 1 学生2
3 1 学生3
4 2 学生4
5 2 学生5

用sql把数据找出来,然后绑定就可以了
select a.aname,b.bname from 表A a,表B b where a.aid=b.aid
孟子E章 2012-10-12
  • 打赏
  • 举报
回复
可以采用嵌套绑定
cf_nxcxy 2012-10-12
  • 打赏
  • 举报
回复
写错了,应该是这样
select a.name,b,name from
(select 组id as id,组名称 as name from a) a,
(select 组id as id学生名称 as name from b) b
where a.id = b.id
这样度取出的结果就是:
A组 学生1,学生2,学生3
B组 学生4,学生5
你直接返回一个dataset绑定就行了
cf_nxcxy 2012-10-12
  • 打赏
  • 举报
回复
select a.name,b,name from
(select 组id as id,组名称 as name from a) as a,
(select 组id as id学生名称 as name from b) as b
where a.id = b.id
kensouterry1 2012-10-12
  • 打赏
  • 举报
回复
擅长使用SQL代码,就用SQL处理数据;
擅长做数据模型,就把多个表中的数据整理到一个数据模型里面去,也是可以的……
kensouterry1 2012-10-12
  • 打赏
  • 举报
回复


declare @a table
(
GroupId int,
GroupName varchar(50)
);
declare @b table
(
GroupId int,
StudentName varchar(50)
);

insert into @a
select 1, 'A组' union all
select 2, 'B组'
insert into @b
select 1, '学生1' union all
select 1, '学生2' union all
select 1, '学生3' union all
select 2, '学生4' union all
select 2, '学生5' -- 测试数据准备完毕

---修改这段为你的SQL查询,直接返回DataTable,然后进行绑定即可
;WITH c1 AS
(
select b.GroupId,
STUFF((select ','+LTRIM(studentName) from @b where groupid = b.GroupId FOR XML PATH('')),1,1,'') 学生姓名
from @a a
join @b b on a.GroupId = b.GroupId
GROUP BY b.GroupId
)
SELECT a.GroupName, c1.学生姓名
from c1 join @a a on c1.GroupId = a.GroupId

--测试结果:
GroupName 学生姓名
-------------------------------------------------- ------------------------------------------
A组 学生1,学生2,学生3
B组 学生4,学生5

(2 行受影响)


110,825

社区成员

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

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

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