1. 程式人生 > >基於VB.Net的SQL資料庫操作

基於VB.Net的SQL資料庫操作

 本人是根據自己的經歷,將有基於VB.Net的資料庫的操作整理如下,或許不是很完整,後面有機會再補充。現將程式碼裡面的大概內容敘述一下:

  1. New(connectstr)方法是建立帶引數的SQLDataBase的例項;
  2. UpdateSQL(updatecmd)方法是執行updatecmd資料庫語句,更新資料庫;
  3. ExecuteSQLToArray(CommandText)函式是通過Sqlreader來獲取伺服器資料庫裡面的值,返回的是二維字串型別的陣列;
  4. ExecuteSQLToDataTable(SelectCommandText)函式通過SqlDataAdapter來獲取伺服器資料庫裡面的值,返回的是DataTable物件,方便後期的處理;
  5. close()方法是釋放資源,關閉資料庫連線。
'********************************
' Function: 定義SQL資料庫操作的類
' Author: 要點理想色彩
' Createtime: 2018/07/23
' Remark: 
'*******************************
Imports System.Data.SqlClient
Public Class SQLDataBase
    ' 資料庫連線字串
    Private cnstr As String = ""
    ' 資料庫執行的SQL指令碼
    Private sqlstr As String = ""
    ' 資料庫連線物件
    Private cn As SqlConnection
    ' SQl執行語句命令
    Private cmd As SqlCommand

    ''' <summary>
    ''' 建立SQlDataBase類的例項,並開啟以《connectstr》為連線字串的資料庫
    ''' </summary>
    ''' <param name="connectstr">連線資料庫的字串;例如:Data Source=IPadress;Initial Catalog=DataBaseName;Integrated Security=false;User ID=使用者名稱;Password=密碼;</param>
    ''' <remarks></remarks>
    Public Sub New(ByVal connectstr As String)
        ' 給資料庫連線字元賦值
        If connectstr.Length = 0 Then
            MsgBox("connectstr為空,建立SQLDataBase失敗")
            Exit Sub
        Else
            cnstr = connectstr
        End If

        ' 連線到資料庫,並開啟
        Try
            cn = New SqlConnection(cnstr)
            cn.Open()
        Catch ex As Exception
            MsgBox("錯誤程式碼為:" & Err.Number & vbCrLf & "錯誤描述為: " & Err.Description)
            Exit Sub
        End Try
    End Sub

    ''' <summary>
    ''' 執行SQL更新語句
    ''' </summary>
    ''' <param name="updatecmd"></param>
    ''' <remarks></remarks>
    Public Sub UpdateSQL(ByVal updatecmd As String)

        ' 給資料庫執行指令碼sqlstr賦值
        If updatecmd.Length = 0 Then
            MsgBox("updatecmd為空,無法更新資料庫")
            Exit Sub
        Else
            sqlstr = updatecmd
        End If

        ' 給命令物件賦值
        cmd = New SqlCommand With {.CommandText = updatecmd, .Connection = cn}

        ' 定義執行SQL語句收影響的行數
        Dim influnrows As Integer
        Try
            influnrows = cmd.ExecuteNonQuery()
        Catch ex As Exception
            MsgBox("錯誤程式碼為:" & Err.Number & vbCrLf & "錯誤描述為: " & Err.Description)
            Exit Sub
        End Try
    End Sub

    ''' <summary>
    ''' 通過Sqlreader來獲取伺服器資料庫裡面的值,返回的是二維字串型別的陣列
    ''' </summary>
    ''' <param name="CommandText">Transact-SQL語句</param>
    ''' <returns>返回的是二維字串型別的陣列</returns>
    ''' <remarks></remarks>
    Public Function ExecuteSQLToArray(ByVal CommandText As String) As String(,)

        ' 定義函式的返回結果
        Dim FunRet As String(,) = Nothing
        ' 定義資料庫reader物件
        Dim reader As SqlDataReader = Nothing

        ' 給資料庫執行指令碼sqlstr賦值
        If CommandText.Length = 0 Then
            MsgBox("updatecmd為空,無法更新資料庫")
            Return FunRet
        Else
            sqlstr = CommandText
        End If

        ' 給命令物件賦值
        cmd = New SqlCommand With {.CommandText = CommandText, .Connection = cn}
        ' 給reader物件賦值
        reader = cmd.ExecuteReader()

        '判斷是否有結果
        If reader.HasRows = False Then
            Return FunRet
        End If


        '*********************
        'remarks:因為reader是一條一條語句的讀取, reader只能獲取列數, 不能獲取行數, 因此需要將總的記錄除以列數皆可以獲取行數
        '*********************

        ' 定義函式返回陣列的列數和行數
        Dim lstReader As New List(Of String)
        Dim intColumnCount As Integer
        Dim intRowsCount As Integer

        '將結果集存到listReader列表
        intColumnCount = reader.FieldCount
        While reader.Read()
            For i = 0 To intColumnCount - 1
                lstReader.Add(reader.GetValue(i).ToString) '//如果資料庫裡面是null,則返回的是空值
            Next
        End While

        '獲取結果集的行數
        intRowsCount = lstReader.Count / intColumnCount

        '將結果轉化為二位陣列
        ReDim FunRet(intRowsCount - 1, intColumnCount - 1)
        Dim index As Integer = 0
        For j = 0 To UBound(FunRet, 1)
            For i = 0 To UBound(FunRet, 2)
                FunRet(j, i) = lstReader.Item(index)
                index = index + 1
            Next
        Next

        '將函式的結果返回
        Return FunRet
    End Function

    ''' <summary>
    ''' 通過SqlDataAdapter來獲取伺服器資料庫裡面的值,返回的是DataTable物件
    ''' </summary>
    ''' <param name="SelectCommandText">Transact-SQL語句</param>
    ''' <returns>返回的是二維字串型別的陣列</returns>
    ''' <remarks></remarks>
    Public Function ExecuteSQLToDataTable(ByVal SelectCommandText As String) As DataTable

        ' 定義函式的返回結果
        Dim FunRet As New DataTable

        ' 給資料庫執行指令碼sqlstr賦值
        If SelectCommandText.Length = 0 Then
            MsgBox("updatecmd為空,無法更新資料庫")
            Return FunRet
        End If

        '將結果填充到SqlDataAdapter中
        Dim sda As SqlDataAdapter
        sda = New SqlDataAdapter(SelectCommandText, cn)
        sda.Fill(FunRet)

        '返回函式的值
        Return FunRet
    End Function

    ''' <summary>
    ''' 釋放資源,關閉資料庫連線
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub close()

        '關閉cmd物件
        If IsNothing(cmd) = False Then
            cmd = Nothing
        End If

        '斷開和資料庫的連線
        If IsNothing(cn) = False Then
            cn.Close()
        End If
    End Sub
End Class