最近遇到了查两个表的情况,首先我想到的是用存储过程,但是如果需要两个查询结果的值的话,必须根据存储过程查询语句的顺序取你要的Table,例如DataSet.Tables[0],DataSet.Table[1]来获取想要的Table值,比较麻烦。早就听说视图了,想着可能比存储过程简单多了,查询了一下资料,确实是比存储过程方便简单快捷多了。
1.自己的理解:视图就是从若干个基本表或者其他视图构造出来的虚拟表。也可以只取某个表的几个字段。同真实的表一样,视图包含一系列带有名称的列和行数据,能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等。
2.简单应用--机房收费系统stucheckcash
需要查询两个表:卡表和学生表。
(1)新建视图--在自己的数据库下找到视图
(2)选择涉及到的表或视图
(3)在表中选择想要的字段
(4)点击保存并重新命名
(5)编写代码(和普通表没有区别,直接把表名改为视图名就行)
Public Function Querystudent(enStudent As StudentEntity) As DataTable Implements IStudent.Querystudentinfo 'Dim student As New StudentEntity '实例化实体类 Dim table As New DataTable '实例化数据表 '定义并实例化参数数组,防止sql注入 Dim paras As sqlParameter() = {New sqlParameter("@Studentno",enStudent.Studentno)} '这里用的是视图,把原先的Student_info改为了StuCardView_info Dim sqlstr As String = "Select * From StuCardView_info where Stuno= @Studentno" '调用sqlHelper类中的ExecSelect()方法来执行查询,获取返回值 table = clssqlHelper.ExecSelect(sqlstr,CommandType.Text,paras) Return table End Function详解:原先需要写两个查询语句,一个关于卡表查询的,一个关于学生表查询的,现在只需要写一个查询语句即可。
3.易错处:
可以看看这个图和上图的区别,第一副图是表之间有关联,卡表与学生表之间有外键,第二图没有建立关联。
区别:第一副图显示结果(查卡号为66):
这幅图显示的是我要的正确结果。
第二幅图显示结果:
会把学生表所有的数据显示出来,卡号是卡表中的对学生表不起作用,所以会显示全部并且给所有条记录的卡号都赋值成了66号。
总结:经过实践,视图在查询两个表,比存储过程易操作。只查询表中的某几个字段也可以,方便快捷,真的是挺实用的。但是也有缺点,操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。这才刚刚开始了解,还需要继续深刻的研究。
Ps:有理解不对的地方请多多指教。
原文链接:https://www.f2er.com/vb/257952.html