博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三层结构之联接查询的实现
阅读量:6683 次
发布时间:2019-06-25

本文共 2348 字,大约阅读时间需要 7 分钟。

试想:如果不使用数据库中的 view 视图,那么在三层结构的开发环境下,如何实现两表或多表( join  table )联接查询所需要的显示结果呢?

为了直观揭露实现办法的本质,于是在此弱化了一些操作步骤,如:配置文件保存连接字符串、数据访问类( DBHelper.cs )访问数据库等的具体实现。

在本示例的数据库中:学生信息表(Students)与成绩表(Score)是一对多的关系( 1:N )。

 

实体层(Entity):
Student.cs

Student.cs

Score.cs

Score.cs


数据访问层(DAL):

StudentDAL.cs

StudentDAL.cs

ScoreDAL.cs

ScoreDAL.cs


业务逻辑层(BLL):

StudentAndScore.cs

ExpandedBlockStart.gif
StudentAndScore.cs
using
 System;
using
 System.Collections.Generic;
using
 System.Text;

namespace
 BLL
{

    
///
 
<summary>

    
///
 封装一个包含2张表字段的实体
    
///
 
</summary>

    
public
 
class
 StudentAndScore
    {

        
int
 code;
        
public
 
int
 Code
        {

            
get
 { 
return
 code; }
            
set
 { code 
=
 value; }
        }

        
string
 name;
        
public
 
string
 Name
        {

            
get
 { 
return
 name; }
            
set
 { name 
=
 value; }
        }

        
float
?
 stuScore;
        
public
 
float
?
 StuScore
        {

            
get
 { 
return
 stuScore; }
            
set
 { stuScore 
=
 value; }
        }
    }
}


StudentAndTeacherBLL.cs

ExpandedBlockStart.gif
StudentAndTeacherBLL.cs
using
 System;
using
 System.Collections.Generic;
using
 System.Text;
//
myself

using
 DAL;
using
 Entity;

namespace
 BLL
{

    
///
 
<summary>

    
///
 获得2张表对应的数据
    
///
 
</summary>

    
public
 
class
 StudentAndTeacherBLL
    {

        
///
 
<summary>

        
///
 注意:该方法获得所有学生的成绩,
        
///
       属于“左外联接”(当没有成绩时,成绩显示为空)。
        
///
       若要实现“内联接”的显示效果,
        
///
       则去掉:if(stuScores.Count == 0) 的判断即可!
        
///
 
</summary>

        
///
 
<returns>
2张表数据的结果集
</returns>

        
public
 List
<
StudentAndScore
>
 GetStudentAndTeacher()
        {

            
//
用来保存结果集

            List
<
StudentAndScore
>
 allStudentAndScore 
=
 
new
 List
<
StudentAndScore
>
();
            
//
获得所有学生的信息

            List
<
Student
>
 students 
=
 
new
 StudentDAL().GetAllStudent();
            
foreach
 (Student stu 
in
 students)
            {

                
//
根据学号获得该学生的所有成绩

                List
<
StuScore
>
 stuScores 
=
 
new
 ScoreDAL().GetAllScore(stu.Code);

                
if
 (stuScores.Count 
==
 
0
//
如果没有该学生的成绩

                {

                    
//
用来保存单个联接实体

                    StudentAndScore studentAndScore 
=
 
new
 StudentAndScore();
                    studentAndScore.Code 
=
 stu.Code;
                    studentAndScore.Name 
=
 stu.Name;
                    studentAndScore.StuScore 
=
 
null
//
成绩为null
                    
//
添加到结果集

                    allStudentAndScore.Add(studentAndScore);
                }
                
else
 
//
如果有该学生的成绩

                {

                    
foreach
 (StuScore SScore 
in
 stuScores)
                    {

                        
//
用来保存单个联接实体

                        StudentAndScore studentAndScore 
=
 
new
 StudentAndScore();
                        studentAndScore.Code 
=
 stu.Code;
                        studentAndScore.Name 
=
 stu.Name;
                        studentAndScore.StuScore 
=
 SScore.Score;
                        
//
添加到结果集

                        allStudentAndScore.Add(studentAndScore);
                    }
                }
            }
            
return
 allStudentAndScore; 
//
返回结果集

        }
    }
}



用户界面层(UI):

Form1.cs

Form1.cs

显示结果如下:

说明:Code、Name  字段来自信息表(Students),而StuScore 字段来自成绩表(Score)。

本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2010/05/08/1730388.html,如需转载请自行联系原作者

你可能感兴趣的文章
Cordova 创建插件
查看>>
什么是geohash(地理散列)
查看>>
关于iOS 5 Could not instantiate class named NSLayoutConstraint错误
查看>>
ITFriend开发日志20140611
查看>>
Jenkins 安装和配置
查看>>
Ubuntu下Fastdfs的安装
查看>>
【一条mysql语句查询top数据】
查看>>
一、Windows Server 2012R2 Hyper-v安装部署
查看>>
Linux下安装Oracle11g服务器
查看>>
PullToRefreshListView 应用讲解
查看>>
git版本控制开发流程小结笔记(一)
查看>>
理解 Backbone.js中的bind和bindAll
查看>>
AD恢复误删除账号
查看>>
How to Create a Node.js Cluster for Speeding Up Your Apps
查看>>
我的友情链接
查看>>
ubuntu离线安装docker及问题解决
查看>>
Redis Cluster的noaddr标记
查看>>
isEmpty和isBlank区别
查看>>
Tomcat服务器性能优化
查看>>
Redux 中 combineReducers实现原理
查看>>