机房收费系统5之视图

    最近遇到了查两个表的情况,首先我想到的是用存储过程,但是如果需要两个查询结果的值的话,必须根据存储过程查询语句的顺序取你要的Table,例如DataSet.Tables[0] DataSet.Table[1]来获取想要的Table值,比较麻烦。早就听说视图了,想着可能比存储过程简单多了,查询了一下资料,确实是比存储过程方便简单快捷多了。

 

          1.自己的理解:视图就是从若干个基本表或者其他视图构造出来的虚拟表。也可以只取某个表的几个字段。同真实的表一样,视图包含一系列带有名称的列和行数据,能够进行的一般操作都可以应用于视图,例如查询,插入,修改,删除操作等

          2.简单应用--机房收费系统stucheckcash

需要查询两个表:卡表和学生表。

  (1)新建视图--在自己的数据库下找到视图

     机房收费系统5之视图_第1张图片

 (2)选择涉及到的表或视图

    机房收费系统5之视图_第2张图片

   3)在表中选择想要的字段

    机房收费系统5之视图_第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.易错处:

    机房收费系统5之视图_第4张图片

   可以看看这个图和上图的区别,第一副图是表之间有关联,卡表与学生表之间有外键,第二图没有建立关联。

   区别:第一副图显示结果(查卡号为66):

   

   这幅图显示的是我要的正确结果。

   第二幅图显示结果:

   机房收费系统5之视图_第5张图片

    会把学生表所有的数据显示出来,卡号是卡表中的对学生表不起作用,所以会显示全部并且给所有条记录的卡号都赋值成了66号。

    总结:经过实践,视图在查询两个表,比存储过程易操作。只查询表中的某几个字段也可以,方便快捷,真的是挺实用的。但是也有缺点,操作视图会比直接操作基础表要慢,所以我们尽量避免在大型表上创建视图。这才刚刚开始了解,还需要继续深刻的研究。

     Ps:有理解不对的地方请多多指教。

你可能感兴趣的:(数据库,VB.NET)