三种方法实现从“一个(组)查询过程中返回两个表的查询结果”
还记得开始做机房的时候,遇到了要从一个函数中返回两个表的查询结果。当时的解决方法很“冲动”也很“无拘无束”,直接在实体类里边添加了其他表的实体,效果是达到了,但总觉得不伦不类。 现在介绍三种解决上述问题的方法(代码为VB.net,系统使用三层架构)。 题设要求:假设我现在要从卡表和学生表里返回查询信息(卡表的comment,money,status和学生表的全部信息),卡表和学生表如下:
图一 学生表
图二 卡表
方法一:视图。 比较简单,相信这种方法是最常用的了。
<span style="font-size:18px;">create view V_ CardStudent @CardNo varchar(100) as select comment,status,studentNo,cardNo,studentName,sex,department,grade,stclass from T_Card,T_Student where T_Card.userName=T_Student.userName select * from V_ CardStudent where cardNo=@CardNo </span>
方法二:sql联合查询。 这种方法要求表之间有外键关联,我的学生表的userName是主键,也是卡表的外键。另外,我们也需要重建一个实体集,要包含所有要求返回的信息。
<span style="font-size:18px;">联合查询sql子句:strSql = "Select c.comment,c.money,c.status From T_Card as c inner join T_Student as s on c.userName=s.userName Where (c.cardNo=@CardNo)"</span>
方法三:泛型集合的“集合”。 这种方法不需要什么主外键、也不用新建实体集,原理简单,但需要用到泛型集合。 原理:我们先查找每个表的实体信息,返回一个List集合,然后把我们所需要的集合结果都添加到一个新的List中,如下(部分代码):
<span style="font-size:18px;">Dim myCardList As List(Of CardEntity) Dim myStudentList As List(Of StudentEntity) '查找卡表中的信息,放到myCardList中 strQueryCardInfo = "Select * From T_Card Where cardNo=@CardNo" Dim paraCard As SqlParameter() = {New SqlParameter("@CardNo",enCard.cardNo)} dtQueryCardInfo = sqlHelper.ExecuteSelect(strQueryCardInfo,CommandType.Text,paraCard) myCardList = CType(listHelper.convertToList(Of CardEntity)(dtQueryCardInfo),Global.System.Collections.Generic.List(Of Global.Entity.CardEntity)) '查找学生表中的信息,放到myStudentList中 strQueryStudentInfo = "Select * From T_Student Where cardNo=@CardNo" Dim paraStudent As SqlParameter() = {New SqlParameter("@CardNo",enStudent.cardNo)} dtQueryStudentInfo = sqlHelper.ExecuteSelect(strQueryStudentInfo,paraStudent) myStudentList = CType(listHelper.convertToList(Of StudentEntity)(dtQueryCardInfo),Global.System.Collections.Generic.List(Of Global.Entity.StudentEntity)) Dim myList As New List(Of Object) '建立一个新List myList.Add(myCardList) '添加myCardList myList.Add(myStudentList) '添加myStudentList Return myList </span>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |