首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

VB.NET版机房收费系统之结合查询

2013-04-05 
VB.NET版机房收费系统之组合查询第一次用VB做它的时候,用字符串拼接做了一个感觉特麻烦,当时在师傅的指导

VB.NET版机房收费系统之组合查询

    第一次用VB做它的时候,用字符串拼接做了一个感觉特麻烦,当时在师傅的指导下了解到不用那么麻烦,将条件都设成一个个的变量,给他们一个默认值“1=1”,如果选择了一个条件,就给那个默认值覆盖掉就OK啦,所有这次果断就用他了。

界面:

 

 VB.NET版机房收费系统之结合查询

U层:

    '定义一个实体    Dim enCombination As New Entity.CombinationEntity    Private Sub FrmStudentBasic_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        '给实体的值赋初值        enCombination.ProField = "1"        enCombination.ProFieldTwo = "1"        enCombination.ProFieldThree = "1"        enCombination.ProOperator = "="        enCombination.ProOperatorTwo = "="        enCombination.ProOperatorThree = "="        enCombination.ProContent = "1"        enCombination.ProContentTwo = "1"        enCombination.ProContentThree = "1"        enCombination.ProCombination = "and"        enCombination.ProCombinationTwo = "and"    End Sub    '*********************************    'U层查询上机状态的事件    '返回值:dataTable    '*******************************    Private Sub btnInquire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInquire.Click        '清空dataGridview控件的记录        DataGridView1.DataSource = vbNull        '判断输入是否有空值!        If cmbField1.Text = "" Or cmbOperator1.Text = "" Or txtInquire1.Text = "" Then            MsgBox("第一个查询条件有空!")            Exit Sub        Else            If Not cmbCombination1.Text = "" Then                If cmbField2.Text = "" Or cmbOperator2.Text = "" Or txtInquire2.Text = "" Then                    MsgBox("第二个查询条件有空!")                    Exit Sub                Else                    If Not cmbCombination2.Text = "" Then                        If cmbField3.Text = "" Or cmbOperator3.Text = "" Or txtInquire3.Text = "" Then                            MsgBox("第三个查询条件有空!")                            Exit Sub                        End If                        '给实体赋值(第三个条件)                        enCombination.ProCombinationTwo = GetEnglish(cmbCombination2.Text.ToString())                        enCombination.ProFieldThree = GetEnglish(cmbField3.Text.ToString())                        enCombination.ProOperatorThree = cmbOperator3.Text.ToString()                        enCombination.ProContentThree = txtInquire3.Text.ToString()                    End If                End If                '给实体赋值(第二个条件)                enCombination.ProCombination = GetEnglish(cmbCombination1.Text.ToString())                enCombination.ProFieldTwo = GetEnglish(cmbField2.Text.ToString())                enCombination.ProOperatorTwo = cmbOperator2.Text.ToString()                enCombination.ProContentTwo = txtInquire2.Text.ToString()            End If            '给实体赋值(第一个条件)            enCombination.ProField = GetEnglish(cmbField1.Text.ToString())            enCombination.ProOperator = cmbOperator1.Text.ToString()            enCombination.ProContent = txtInquire1.Text.ToString()        End If        Dim studentBasic As New BLL.StudentBasicBLL        Dim tb As New DataTable        Try            tb = studentBasic.InquireStudentBasic(enCombination)        Catch ex As Exception            MsgBox(ex.Message.ToString())        End Try        DataGridView1.DataSource = tb    End Sub    '****************************    '函数:将控件中的汉字变为相应的英文    '*********************************    Public Function GetEnglish(ByVal strControl As String) As String        Select Case (strControl)            Case "卡号"                Return "cardNo"            Case "学号"                Return "studentNo"            Case "性别"                Return "sex"            Case "姓名"                Return "studentName"            Case "年级"                Return "grade"            Case "系别"                Return "department"            Case "班号"                Return "class"            Case "与"                Return "and"            Case "或"                Return "or"            Case Else                Return ""        End Select    End Function


B层:

Public Function InquireStudentBasic(ByVal enCombination As Entity.CombinationEntity) As DataTable        Dim dataAccess As New Factory.FactoryDataBase     '定义工厂        Dim ICard As IDAL.ICard                           '定义接口        Dim tb As New DataTable                           '定义一个DataTable        ICard = dataAccess.CreateICard()                  '创建接口        tb = ICard.SelectCard(enCombination)              '调用接口的方法        Return tb                                         '返回值    End Function


D层:

开始没有存储过程时:

'定义数据库连接对象,并利用反射将连接字符串赋给conn        Dim conn As New SqlClient.SqlConnection        conn.ConnectionString = ConfigurationManager.AppSettings("strConn")        '定义执行sql查询语句        Dim strSQL As String        strSQL = "select * from View_StudentCard where " + enCombination.ProField + enCombination.ProOperator + " '" & enCombination.ProContent & "'" + " " + enCombination.ProCombination + " " + enCombination.ProFieldTwo + enCombination.ProOperatorTwo + "'" & enCombination.ProContentTwo & "' " + " " + enCombination.ProCombinationTwo + " " + enCombination.ProFieldThree + enCombination.ProOperatorThree + " '" & enCombination.ProContentThree & "'"  '定义一个dataAdapter对象        Dim da As New SqlDataAdapter(strSQL, conn)        '定义一个dataTable对象     Dim tb As New DataTable        '将结果集填充到tb中()        da.Fill(tb)        '函数返回值        Return tb


后来加上存储过程:

 Dim strSQL As String        Dim paras As SqlParameter()        enCombination.ProTableName = " View_StudentCard"     '确定数据库表名        paras = New SqlParameter() {New SqlParameter("@cmbFieldA", enCombination.ProField),                                   New SqlParameter("@cmbFieldB", enCombination.ProFieldTwo),                                   New SqlParameter("@cmbFieldC", enCombination.ProFieldThree),                                   New SqlParameter("@cmbOperatorA", enCombination.ProOperator),                                   New SqlParameter("@cmbOperatorB", enCombination.ProOperatorTwo),                                   New SqlParameter("@cmboperatorC", enCombination.ProOperatorThree),                                   New SqlParameter("@txtInquireA", enCombination.ProContent),                                   New SqlParameter("@txtInquireB", enCombination.ProContentTwo),                                   New SqlParameter("@txtInquireC", enCombination.ProContentThree),                                   New SqlParameter("@cmbCombinationA", enCombination.ProCombination),                                   New SqlParameter("@cmbCombinationB", enCombination.ProCombinationTwo),                                    New SqlParameter("@tableName", enCombination.ProTableName)                                  }        strSQL = "PROC_CombinationInquire"        Dim tb As New DataTable        tb = DAL.SqlHelper.ExecuteReader(strSQL, CommandType.StoredProcedure, paras)        Return tb    End Function


SQLHELPER里的ExecuteReader方法:

 '**********************************    '带参数的返回结果集的sql查询或存储过程    '参数:sql语句,command类型(存储过程为storedProcedure,其他为text),参数集合    '返回值:datatable    '**********************************    Public Shared Function ExecuteReader(ByVal strSQL As String, ByVal cmdType As CommandType, ByVal paras As SqlParameter()) As DataTable        Dim conn As New SqlClient.SqlConnection        conn.ConnectionString = ConfigurationManager.AppSettings("strConn")        Dim cmd As New SqlCommand(strSQL, conn)        cmd.CommandType = cmdType        cmd.Parameters.AddRange(paras)        '打开数据库连接        If conn.State = ConnectionState.Closed Then            conn.Open()        End If        Dim reader As SqlDataReader        Dim tb As New DataTable        reader = cmd.ExecuteReader        tb.Load(reader)        '关闭数据库连接        If conn.State = ConnectionState.Open Then            conn.Close()        End If        Return tb    End Function


创建存储过程:

create procedure PROC_StudentBasicInquire@cmbFieldA varchar(20),@cmbOperatorn varchar(20), @txtInquireA varchar(20), @cmbCombinationA  varchar(20),@cmbFieldB  varchar(20),@cmbOperatorB  varchar(20),@txtInquireB  varchar(20),@cmbCombinationB  varchar(20),@cmbFieldC  varchar(20),@cmboperatorC varchar(20),@txtInquireC varchar(20),@TempSql varchar(20),@tableName  Sql varchar(20))         --tableName获取数据库表名的  Asdeclare @TempSql varchar(500)--临时存放sql语句  --CHAR(32)是空格,CHAR(39)单引号 beginset @TempSql='select * from ' +@tableName  +' where '+CHAR(32)+@cmbFieldA +@cmbOperatorA+CHAR(39) +@txtInquireA +CHAR(39) +@cmbCombinationA +CHAR(32)+ @cmbFieldB + @cmbOperatorB +CHAR(39)+ @txtInquireB  +CHAR(39) +@cmbCombinationB + CHAR(32)+ @cmbFieldC + @cmboperatorC ++CHAR(39)+@txtInquireC+CHAR(39)execute (@TempSql) end 

这样之后我们需要的那几个组合查询,就只需要创建一个存储过程,我们通过参数让他从不同的表里查询。

 

13楼hejingyuan63小时前
加油了
12楼lfmilaoshi3小时前
用过来,就慢慢的理解了
11楼caozhangyingfei01093小时前
面向对象?
10楼mazhaojuan3小时前
原来如此简单!
9楼CJL56783小时前
实践中学习
8楼wss7846161583小时前
加油了
7楼chenjinge73小时前
学习了
6楼leimengyuanlian3小时前
不错啊,加油!
5楼zllaptx4869前天 18:58
学习ing
4楼liu7650230514天前 19:44
一个问题:实体类的初始化,为什么在load的时候进行。
Re: zuozuo12453天前 11:01
当时想着窗体一加载,那个实体类的成员就必须有初值
3楼han_yankun20094天前 17:19
这个好,我也用过额
2楼XUJIAOlf5天前 10:47
学习了。
1楼wj80232013-03-27 20:29
小左加油~

热点排行