基於VB.Net的SQL資料庫操作
阿新 • • 發佈:2019-01-04
本人是根據自己的經歷,將有基於VB.Net的資料庫的操作整理如下,或許不是很完整,後面有機會再補充。現將程式碼裡面的大概內容敘述一下:
- New(connectstr)方法是建立帶引數的SQLDataBase的例項;
- UpdateSQL(updatecmd)方法是執行updatecmd資料庫語句,更新資料庫;
- ExecuteSQLToArray(CommandText)函式是通過Sqlreader來獲取伺服器資料庫裡面的值,返回的是二維字串型別的陣列;
- ExecuteSQLToDataTable(SelectCommandText)函式通過SqlDataAdapter來獲取伺服器資料庫裡面的值,返回的是DataTable物件,方便後期的處理;
- 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