1. 程式人生 > >VB.NET 資料操作封裝

VB.NET 資料操作封裝

1、查詢資料集

 '獲取查詢資料集
    Public Overloads Function QueryCommand(ByRef cmd As SqlCommand, Optional ByRef errMsg As String = "") As DataTable
        errMsg = ""
        Try
            If cmd.Connection Is Nothing Then
                GetSqlConnection()
                cmd.Connection = Me.cn
                Me.openSqlConnection(Me.cn)
            End If
            Dim ds As New DataSet
            Dim ap As SqlDataAdapter = New SqlDataAdapter(cmd)
            ap.Fill(ds, "table01")
            cmd.Dispose()
            ap.Dispose()
            ds.Dispose()
            Return ds.Tables(0)
        Catch ex As Exception
            errMsg = "執行QueryCommand失敗" & Chr(13) & ex.Message
            WriteLog("執行QueryCommand失敗" & Chr(13) & "SQL:" & cmd.CommandText & Chr(13) & ex.Message & Chr(13) & ex.StackTrace)
            Return Nothing
        End Try
    End Function

2、執行SQL查詢
Public Function QuerySQL(sqlstr As String, ByRef errmsg As String) As DataTable
        errmsg = ""
        Dim cmd As New SqlCommand
        Dim errcode As String = TenpayUtil.getTimestamp
        Try
            Me.GetSqlConnection()
            Me.openSqlConnection(Me.cn)
            cmd.Connection = Me.cn
            cmd.CommandText = sqlstr
            errmsg = ""
            Return QueryCommand(cmd)
        Catch ex As Exception
            errmsg = "執行查詢出錯,錯誤碼:" & errcode
            WriteLog(errmsg & ",詳情:" & Chr(13) & ex.Message & Chr(13) & ex.StackTrace)
            Return Nothing
        Finally
            Me.closeSqlConnection(Me.cn)
            If cmd IsNot Nothing Then
                cmd.Dispose()
            End If
        End Try
    End Function

3、執行儲存過程,無返回資料集
Public Function ExecSQL(sqlstr As String, ByRef errmsg As String, Optional ByRef sqltran As SqlTransaction = Nothing) As Integer
        errmsg = ""
        Dim cmd As New SqlCommand
        Dim errcode As String = TenpayUtil.getTimestamp
        Try
            If sqltran IsNot Nothing Then
                If sqltran.Connection IsNot Nothing Then
                    cmd.Connection = sqltran.Connection
                    cmd.Transaction = sqltran
                Else
                    Me.GetSqlConnection()
                    Me.openSqlConnection(Me.cn)
                    cmd.Connection = Me.cn
                End If
            Else
                Me.GetSqlConnection()
                Me.openSqlConnection(Me.cn)
                cmd.Connection = Me.cn
            End If
            cmd.CommandText = sqlstr
            errmsg = ""
            Return cmd.ExecuteNonQuery
        Catch ex As Exception
            errmsg = "執行SQL出錯,錯誤碼:" & errcode
            WriteLog(errmsg & "SQL:" & sqlstr & Chr(13) & ",詳情:" & Chr(13) & ex.Message & Chr(13) & ex.StackTrace)
            Return 0
        Finally
            If sqltran Is Nothing Then
                Me.closeSqlConnection(Me.cn)
            End If
            If cmd IsNot Nothing Then
                cmd.Dispose()
            End If
        End Try
    End Function

4、執行儲存過程,有資料集返回、有引數返回
    Sub execProc(procName As String, inputs As Dictionary(Of String, Object), ByRef outputs As Dictionary(Of String, SqlParameter), ByRef errMsg As String, ByRef resTable As DataTable, Optional ByRef sqlTran As SqlTransaction = Nothing)
        '事務優先
        Dim errcode As String = TenpayUtil.getTimestamp
        Dim cmd As SqlCommand
        Dim sqlpara As SqlParameter
        If inputs Is Nothing Then
            errMsg = "inputs不能為Nothing"
            Exit Sub
        End If
        If outputs Is Nothing Then
            errMsg = "outputs不能為Nothing"
            Exit Sub
        End If
        Try
            cmd = New SqlCommand(procName)
            If sqlTran IsNot Nothing Then
                If sqlTran.Connection IsNot Nothing Then
                    cmd.Connection = sqlTran.Connection
                    cmd.Transaction = sqlTran
                Else
                    Me.cn = GetSqlConnection()
                    Me.openSqlConnection(Me.cn)
                    cmd.Connection = Me.cn
                End If
            Else
                Me.cn = GetSqlConnection()
                Me.openSqlConnection(Me.cn)
                cmd.Connection = Me.cn
            End If

            cmd.CommandType = CommandType.StoredProcedure
            '輸入引數
            For Each key As String In inputs.Keys
                sqlpara = getSQLParaByObj(key, inputs(key))
                cmd.Parameters.Add(sqlpara)
            Next
            '輸出引數
            If outputs IsNot Nothing Then
                For Each key As String In outputs.Keys
                    If outputs(key) IsNot Nothing Then
                        outputs(key).Direction = ParameterDirection.Output
                        cmd.Parameters.Add(outputs(key))
                    End If
                Next
            End If
            cmd.ExecuteNonQuery()
            Dim ds As New DataSet
            Dim ap As SqlDataAdapter = New SqlDataAdapter(cmd)
            ap.Fill(ds, "table01")
            cmd.Dispose()
            ap.Dispose()
            ds.Dispose()
            resTable = ds.Tables(0)
        Catch ex As SqlException
            If ex.Number <> 266 Then
                errMsg = "執行" & procName & "出錯,錯誤碼:" & errcode
                WriteLog(errMsg & ",詳情:" & Chr(13) & ex.Message & Chr(13) & ex.StackTrace)
            End If

        Finally
            If sqlTran Is Nothing Then
                Me.closeSqlConnection(Me.cn)
            End If
        End Try
    End Sub