帶有儲存過程的組合查詢
組合查詢從它的表面的意思我們知道是通過一個條件或者多個條件進行查詢,我們先來看看組合查詢的介面:
程式碼:
U層:
Private Sub btnCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCheck.Click
Dim EntityWork As New CRCMEntity.CombinationqueryEntity
Dim BllWork As New CRCMBLL.OperatorWorkRecordBLL
'在只有一個條件的情況下.判斷條件是否輸入完整
If cmbRelation1.Text = "" Then
Dim arrayCtl() As Control
ReDim Preserve arrayCtl(2)
arrayCtl(0) = cmbFiles1
arrayCtl(1) = cmbOperator1
arrayCtl(2) = txtCondition1
IsFrmControlEmpty.IsSomeEmpty(arrayCtl)
End If
'在有兩個條件進行組合查詢的時候判斷條件是否輸入完整
If cmbRelation1.Text <> "" Then
Dim arrayCtl() As Control
ReDim Preserve arrayCtl(6)
arrayCtl(0) = cmbFiles1
arrayCtl(1) = cmbOperator1
arrayCtl(2) = txtCondition1
arrayCtl(3) = cmbRelation1
arrayCtl(4) = cmbFiles2
arrayCtl(5) = cmbOperator2
arrayCtl(6) = txtCondition2
IsFrmControlEmpty.IsSomeEmpty(arrayCtl)
End If
'在用三個條件進行組合查詢的時候判斷條件是否輸入完整
If cmbRelation2.Text <> "" Then
IsFrmControlEmpty.IsAllEmpty(Me)
End If
'第一行欄位名
EntityWork.Filed1 = cmbFiles1.Text
'第一行操作符
EntityWork.Operater1 = cmbOperator1.Text
'第一行條件
EntityWork.Condition1 = txtCondition1.Text
'第一行組合關係
EntityWork.CombinationRelation1 = cmbRelation1.Text
'第二行欄位名
EntityWork.Filed2 = cmbFiles2.Text
'第二行操作符
EntityWork.Operater2 = cmbOperator2.Text
'第二行條件
EntityWork.Condition2 = txtCondition2.Text
'第二行組合關係
EntityWork.CombinationRelation2 = cmbRelation2.Text
'第三行欄位名
EntityWork.Filed3 = cmbFiles3.Text
'第三行操作符
EntityWork.Operater3 = cmbOperator3.Text
'第三行條件
EntityWork.Condition3 = txtCondition3.Text
dgvWorkRecord.DataSource = BllWork.WorkRecord(EntityWork)
End Sub
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
Application.Exit()
End Sub
End Class
在U層呼叫一個判斷控制元件是否為空的函式:
'*************************************************
'作者:唐歡
'小組:
'說明:判斷窗體介面的空間是否為空
'建立日期:2013/2/19
'版本號:V1.00
'**********************************************'
Public Class IsFrmControlEmpty
''' <summary>
'''判斷窗體中所有的控制元件是否全部為空
''' </summary>
Public Shared Function IsAllEmpty(ByVal Frm As Form) As Boolean
Dim control As New Control
For Each Ctl As Control In Frm.Controls '變數窗體中的所有控制元件
If Ctl.GetType() Is GetType(TextBox) Then '判斷控制元件型別是否為TextBox
If Ctl.Text.Length = 0 Then '判斷TextBox是否為空,返回True,否則返回False
MessageBox.Show(String.Format("資訊為填寫完整,請把資訊填寫完整再儲存!"))
Ctl.Focus()
Return True
Exit Function
End If
ElseIf Ctl.GetType() Is GetType(ComboBox) Then '如果空間為Combobox,
If Ctl.Text.Length = 0 Then '如果Combobox為空,返回True,否則返回False
MsgBox(Ctl.Tag.ToString + "不能為空!", vbOK, "溫馨小提示")
Ctl.Focus()
Return True
Exit Function
End If
End If
Next
Return False
End Function
''' <summary>
'''判斷窗體中部分控制元件是否為空
''' </summary>
Public Shared Function IsSomeEmpty(ByVal ArrayCtl() As Control) As Boolean
Dim control As New Control
For Each ctl As Control In ArrayCtl '遍歷陣列中所有元素
If ctl.GetType() Is GetType(TextBox) Then '如果控制元件型別為TextBox
If ctl.Text.Length = 0 Then '如果輸入框為空,返回True ,否則返回False
MsgBox(ctl.Tag.ToString + "不能為空!", vbOK, "溫馨小提示")
ctl.Focus() '輸入框獲得焦點
Return True
Exit Function
End If
ElseIf ctl.GetType() Is GetType(ComboBox) Then '判斷控制元件型別是否為Combobox
If ctl.Text.Length = 0 Then '如果Combobox的為空,返回True,否則返回False
MsgBox(ctl.Tag.ToString + "不能為空!", vbOK, "溫馨小提示")
ctl.Focus()
Return True
Exit Function
End If
End If
Next
Return False
End Function
B層:
''' <summary>
''' 查詢工作記錄
''' </summary>
Public Function WorkRecord(ByVal WorkHistory As CombinationqueryEntity) As DataTable
Dim EntityWork As New CRCMEntity.CombinationqueryEntity
Dim DalWork As New CRCMDAL.OperatorWorkRecordDAL
'第一行欄位名
EntityWork.Filed1 = WorkHistory.Filed1
'第一行操作符
EntityWork.Operater1 = WorkHistory.Operater1
'第一行條件
EntityWork.Condition1 = WorkHistory.Condition1
'第一行組合關係
EntityWork.CombinationRelation1 = WorkHistory.CombinationRelation1
'第二行欄位名
EntityWork.Filed2 = WorkHistory.Filed2
'第二行操作符
EntityWork.Operater2 = WorkHistory.Operater2
'第二行條件
EntityWork.Condition2 = WorkHistory.Condition2
'第二行組合關係
EntityWork.CombinationRelation2 = WorkHistory.CombinationRelation2
'第三行欄位名
EntityWork.Filed3 = WorkHistory.Filed3
'第三行操作符
EntityWork.Operater3 = WorkHistory.Operater3
'第三行條件
EntityWork.Condition3 = WorkHistory.Condition3
Dim table As DataTable '定義一個資料集
table = DalWork.SelectOperatorWorkRecord(EntityWork)
Return table
End Function
D層:
''' <summary>
''' 通過條件查詢查詢操作員工作記錄
''' </summary>
Public Function SelectOperatorWorkRecord(ByVal WorkRecord As CombinationqueryEntity) As DataTable
Dim sqlcmdstr As String = "PROC_CR_Select_OpertorWorkRecord"
Dim paras As SqlParameter() = {New SqlParameter("@Field1", WorkRecord.Filed1),
New SqlParameter("@Operation1", WorkRecord.Operater1),
New SqlParameter("@Condition1", WorkRecord.Condition1),
New SqlParameter("@Combinationrelations1", WorkRecord.CombinationRelation1),
New SqlParameter("@Field2", WorkRecord.Filed2),
New SqlParameter("@Operation2", WorkRecord.Operater2),
New SqlParameter("@Condition2", WorkRecord.Condition2),
New SqlParameter("@Combinationrelations2", WorkRecord.CombinationRelation2),
New SqlParameter("@Field3", WorkRecord.Filed3),
New SqlParameter("@Operation3", WorkRecord.Operater3),
New SqlParameter("@Condition3", WorkRecord.Condition3)
}
Dim table As DataTable '定義一個資料集
table = SqlHelp.Sqlhelper.SelectInfo(sqlcmdstr, CommandType.StoredProcedure, paras)
Return table
End Function
儲存過程:
-- =============================================
-- Author: 唐歡
-- Create date: 2013年2月15日
-- Description: 查詢操作員工作記錄
-- =============================================
ALTER PROCEDURE [dbo].[PROC_CR_Select_OpertorWorkRecord]
--第一行
@Field1 varchar(40), --欄位名
@Operation1 varchar(10),--操作符
@Condition1 char(50),--條件
@Combinationrelations1 char(10), --組合關係
--第二行
@Field2 varchar(40), --欄位名
@Operation2 varchar(10),--操作符
@Condition2 char(50),--條件
@Combinationrelations2 char(10), --組合關係
--第三行
@Field3 varchar(40), --欄位名
@Operation3 varchar(10),--操作符
@Condition3 char(50)--條件
AS
declare @Sql varchar(400)
declare @Sqlstr1 varchar(20) --第一行中的欄位名對應表中欄位名
declare @Sqlstr2 varchar(20) --第二行中的欄位名對應表中欄位名
declare @Sqlstr3 varchar(20) --第三行中的欄位名對應表中欄位名
declare @SqlRelations1 varchar(20) --表示第一行中的組合關係
declare @SqlRelations2 varchar(20) --表示第二行中的組合關係
BEGIN
--表示第一行中的欄位名用表中的欄位名錶示
IF (@Field1 ='教師')
set @Sqlstr1 ='UserName'
if (@Field1 ='登陸日期')
set @Sqlstr1 ='UseDate'
if (@Field1 ='登陸時間')
set @Sqlstr1 ='UseTime'
if (@Field1 ='登出日期')
set @Sqlstr1 ='NouseDate'
if (@Field1 ='登出時間')
set @Sqlstr1 ='NouseTime'
if (@Field1 ='機器名')
set @Sqlstr1 ='RoomNo'
--表示第二行中的欄位名用表中的欄位名錶示
IF (@Field2 ='教師')
set @Sqlstr2 ='UserName'
if (@Field2 ='登陸日期')
set @Sqlstr2 ='UseDate'
if (@Field2 ='登陸時間')
set @Sqlstr2 ='UseTime'
if (@Field2 ='登出日期')
set @Sqlstr2 ='NouseDate'
if (@Field2 ='登出時間')
set @Sqlstr2 ='NouseTime'
if (@Field2 ='機器名')
set @Sqlstr2 ='RoomNo'
--表示第三行中的欄位名用表中的欄位名錶示
IF (@Field3 ='教師')
set @Sqlstr3 ='UserName'
if (@Field3 ='登陸日期')
set @Sqlstr3 ='UseDate'
if (@Field3 ='登陸時間')
set @Sqlstr3 ='UseTime'
if (@Field3 ='登出日期')
set @Sqlstr3 ='NouseDate'
if (@Field3 ='登出時間')
set @Sqlstr3 ='NouseTime'
if (@Field3 ='機器名')
set @Sqlstr3 ='RoomNo'
--第一個組合關係
if (@Combinationrelations1='')
set @SqlRelations1=null
if (@Combinationrelations1='和')
set @SqlRelations1='AND'
if (@Combinationrelations1='或')
set @SqlRelations1='OR'
--第二個組合關係
if (@Combinationrelations2 ='')
set @SqlRelations2=null
if (@Combinationrelations2 ='和')
set @SqlRelations2 ='AND'
if (@Combinationrelations2 ='或')
set @SqlRelations2 ='OR'
set @Sql ='select UserName AS 使用者名稱,UseDate as 登陸日期,UseTime as 登陸時間,NouseDate as 退出日期,NouseTime as 退出時間,RoomNo as 機器名 from WorkRecord where '+@Sqlstr1 ++@Operation1+char(39)+@Condition1 +CHAR(39)
if (@SqlRelations1 is not null)
set @Sql =@Sql +@SqlRelations1 +CHAR(32)+@Sqlstr2 +@Operation2 +CHAR(39)+@Condition2 +CHAR(39)
if (@SqlRelations2 is not null)
set @Sql =@Sql +@SqlRelations2 +CHAR(32)+@Sqlstr3 +@Operation3 +CHAR(39)+@Condition3 +CHAR(39)
execute (@Sql)
END
Sqlhellp:
''' <summary>
'''帶引數的查詢
''' </summary>
Public Shared Function SelectInfo(ByVal CommandText As String, ByVal CommandType As CommandType, ByVal CommandParameters As SqlParameter()) As DataTable
Dim sqlcn As New SqlConnection '定義資料庫連線物件
sqlcn = GetConnect()
sqlcn.Open() '開啟資料庫
Dim sqlcmd As SqlCommand '定義命令物件
sqlcmd = New SqlCommand(CommandText, sqlcn)
Dim InfoAdaptor As SqlDataAdapter '定義介面卡物件
Dim InfoDataset As New DataSet '定義一個資料集
InfoAdaptor = New SqlDataAdapter(sqlcmd)
sqlcmd.CommandType = CommandType
sqlcmd.Parameters.AddRange(CommandParameters) '新增引數
InfoAdaptor.Fill(InfoDataset) '填充介面卡
Return InfoDataset.Tables(0) '返回資料集的表,從第一個開始索引
sqlcn.Close()
End Function
1.儲存過程的編寫與使用,在剛開始學習資料的時候,只是知道有儲存過程和事務,但是從來沒有自己真正的動手去
寫,剛開始著手的時候,感覺挺難的,難主要是難在不知道從哪裡下手,剛開始寫簡單的儲存過程還可以,當寫組合
查詢這塊的儲存過程就是錯誤百出了,而且還不知道是在哪裡出現了錯誤,在網上查詢了很多關於儲存過程的內容,
搗鼓了幾天,終於做出來了,那一刻感覺真的是特別好。
2.Sqlhelp的編寫與使用,SQLHelp 知道它是在學習UML的時候,但是對它是挺好奇的,但是沒有怎麼去研究,這次
寫機房收費系統的程式碼,在D層用到資料連線,不斷的重複寫著同樣的語句,感覺特別的麻煩,就開始試著去寫
SQLHelp,在網上找了寫資料,我看著也都是迷迷糊糊的,看來看去,還不如我自己動手寫呢,寫完了,感覺不過就是
如此吧,SQLHelp 和VB版的模組差不多,對它我並不陌生。
3.對三層的應用,機房收費系統是用三層來做的,其實吧,用幾層來做並重要,重要的是理解分層的思想,就像有些
判斷不一定需要放在B層,也可以放在U層的。在做機房書費系統的時候,把三層運用得更加順手了。
4.有時候感覺很難很難,都是自己在嚇自己,遇到再難的問題,在我們面前還有一個巨人——百度,要相信自己。
相關文章
- SQLServer查詢使用者儲存過程SQLServer儲存過程
- Ms Sql Server查詢儲存過程中的內容SQLServer儲存過程
- 如何查詢一個儲存過程是否在執行儲存過程
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- Oracle服務啟動-索引-子查詢-分頁儲存過程問題Oracle索引儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- SQLSERVER儲存過程SQLServer儲存過程
- Oracle儲存過程Oracle儲存過程
- mysql-分組查詢-子查詢-連線查詢-組合查詢MySql
- Mysql 儲存過程的使用MySql儲存過程
- Sqlserver中的儲存過程SQLServer儲存過程
- 組合查詢(UNION)
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- lightdb新特性--相容oracle儲存過程的聯合陣列Oracle儲存過程陣列
- MySQL---------儲存過程MySql儲存過程
- 造數儲存過程儲存過程
- linux呼叫儲存過程Linux儲存過程
- Oracle儲存過程-1Oracle儲存過程
- 儲存過程——遊標儲存過程
- Winform呼叫儲存過程ORM儲存過程
- 儲存過程 傳 datatable儲存過程
- mysql儲存過程整理MySql儲存過程
- JAVA儲存過程(轉)Java儲存過程
- JdbcTemplate調儲存過程JDBC儲存過程
- MySQL之儲存過程MySql儲存過程
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- plsqlDevloper 儲存過程的除錯SQLdev儲存過程除錯
- mysql儲存過程的引數MySql儲存過程
- 如何在儲存過程中擁有role的許可權儲存過程
- 資料的儲存和查詢分離不利查詢效能 - thenewstack