前沿拓展:
vb.net數(shù)據(jù)庫(kù)
先從數(shù)損取夜著回力民植略移未據(jù)庫(kù)中獲取到要添加的值
sql = “select vb_query").Rows(i).Item(0))
next
1、安全身份驗(yàn)證基類(lèi)重要性
為何要在講解數(shù)據(jù)庫(kù)**作核心類(lèi)庫(kù)前,需要講解此基類(lèi)。主要是基于以下幾個(gè)因素:
相對(duì)安全性
既然是核心數(shù)據(jù)庫(kù)**作類(lèi)庫(kù),很大程度上,并不希望無(wú)關(guān)人員調(diào)用此類(lèi)庫(kù),尤其是在企業(yè)內(nèi)部或者第三方開(kāi)發(fā)的應(yīng)用程序被其他用戶調(diào)用。
授權(quán)等級(jí)
同一團(tuán)隊(duì)合作中,為了管控每個(gè)用戶的使用數(shù)據(jù)庫(kù)**作等級(jí)。例如某個(gè)開(kāi)發(fā)用戶A,可從此類(lèi)庫(kù)調(diào)用的函數(shù),只能是讀取數(shù)據(jù)庫(kù),刪除和更新則沒(méi)有;某個(gè)開(kāi)發(fā)用戶B,可以調(diào)用此類(lèi)庫(kù)的讀取、更新等**作數(shù)據(jù)庫(kù)的函數(shù),但函數(shù)提供的參數(shù)不一樣,不可使用事務(wù)**作。
后續(xù)授權(quán)擴(kuò)展可用性
此基類(lèi),可以讓其他類(lèi)庫(kù)繼承,并不一定只限制與**作數(shù)據(jù)庫(kù)的內(nèi)容;有些類(lèi)庫(kù)只屬于核心團(tuán)隊(duì)調(diào)用;有些類(lèi)庫(kù)是普通團(tuán)隊(duì)也可以,各自開(kāi)發(fā)組群根據(jù)各自需要自行設(shè)置安全等級(jí)參數(shù)。
2、授權(quán)等級(jí)設(shè)置
設(shè)置一個(gè)授權(quán)等級(jí)的枚舉類(lèi)型:
”’ <summary>
”’ 說(shuō)明:授權(quán)等級(jí)
”’ </summary>
”’ <remarks></remarks>
Public Enum EmpowerLevel
A = 1
B = 2
C = 3
D = 4
E = 5
F = 6
Z = 50
End Enum
授權(quán)等級(jí)從A-Z,意味著從高到低,授權(quán)等級(jí)越高,今后涉及到開(kāi)發(fā)類(lèi)庫(kù)中,可調(diào)用的函數(shù)會(huì)越多。
如果你想A1,A2,A3怎么設(shè)置也一樣,這個(gè)只是為了今后調(diào)用方案,統(tǒng)一這么設(shè)置。內(nèi)部開(kāi)發(fā)團(tuán)隊(duì)了解就ok,只是一個(gè)**作規(guī)范而已。
3、身份驗(yàn)證類(lèi)庫(kù)設(shè)計(jì)思路
屬性信息設(shè)置
用戶名
我們需要提高給開(kāi)發(fā)用戶一個(gè)賬戶,也是其唯一用戶ID
授權(quán)信息
此用戶授權(quán)信息是加密的信息,判斷用戶是否被授權(quán)調(diào)用此類(lèi)庫(kù)
校驗(yàn)碼
此校驗(yàn)碼,是在授權(quán)驗(yàn)證通過(guò),提取用戶的授權(quán)等級(jí)
授權(quán)驗(yàn)證通過(guò)
授權(quán)驗(yàn)證完畢后,返回一個(gè)屬性,記錄通過(guò)還是不通過(guò),如果不通過(guò),則直接強(qiáng)制退出
授權(quán)等級(jí)
最后驗(yàn)證完畢后,返回授權(quán)等級(jí)
返回信息
如果驗(yàn)證失敗,則返回提示信息
方法設(shè)置
授權(quán)校驗(yàn)函數(shù)
對(duì)于授權(quán)碼的驗(yàn)證,確定是否授權(quán),授權(quán)通過(guò),則返回授權(quán)驗(yàn)證通過(guò)
獲取授權(quán)等級(jí)函數(shù)
在授權(quán)驗(yàn)證通過(guò)后,根據(jù)校驗(yàn)碼,返回授權(quán)等級(jí)。
設(shè)計(jì)參數(shù)類(lèi)型
為了類(lèi)型使用并不確定,也為方便**作,此基類(lèi)的相關(guān)參數(shù)采用泛型。
主要是定義VB.NET泛型類(lèi)型時(shí),即使用一個(gè)或多個(gè)數(shù)據(jù)類(lèi)型將其參數(shù)化。這樣可允許使用代碼定制數(shù)據(jù)類(lèi)型以滿足其要求。代碼可以通過(guò)泛型元素聲明若干個(gè)不同的編程元素,每個(gè)元素可使用一組不同的數(shù)據(jù)類(lèi)型。但是,無(wú)論聲明的元素使用哪些數(shù)據(jù)類(lèi)型,它們均執(zhí)行相同的邏輯。
具體介紹,可以參考VB.net學(xué)習(xí)筆記(十九)數(shù)組、**、泛型 ,里面講的不錯(cuò)。當(dāng)然也可以在百度里搜索下VB.NET 泛型
基本的思路已經(jīng)構(gòu)造完畢,剩下編寫(xiě)代碼
”’ <summary>
”’ 創(chuàng)建時(shí)間:2019.8.10
”’ 作者: kevin zhu
”’ 說(shuō)明:安全身份驗(yàn)證基類(lèi),繼承此基類(lèi)的子類(lèi)要重寫(xiě)
”’ </summary>
”’ <typeparam name=”T”>泛型參數(shù),可以是用戶ID</typeparam>
”’ <typeparam name=”V”>泛型參數(shù),默認(rèn)是類(lèi)授權(quán)碼</typeparam>
”’ <typeparam name=”P”>泛型參數(shù),默認(rèn)是過(guò)程及函數(shù)授權(quán)碼</typeparam>
”’ <remarks></remarks>
Public MustInherit Class SecuriVerify(Of T, V, P)
#Region “基類(lèi)相關(guān)參數(shù)”
”’ <summary>
”’ 說(shuō)明:授權(quán)用戶名
”’ </summary>
”’ <remarks>只能程序集里訪問(wèn)</remarks>
Friend MUserName As T ‘//用戶名
”’ <summary>
”’ 說(shuō)明: 類(lèi)使用的授權(quán)碼
”’ </summary>
”’ <remarks>只能程序集里訪問(wèn)</remarks>
Friend MSecuriKey As V ‘//類(lèi)授權(quán)碼
”’ <summary>
”’ 說(shuō)明:類(lèi)里面的函數(shù)及過(guò)程調(diào)用的授權(quán)碼
”’ </summary>
”’ <remarks>只能程序集里訪問(wèn)</remarks>
Friend MProcKey As P ‘//類(lèi)中函數(shù)及過(guò)程授權(quán)碼
”’ <summary>
”’ 說(shuō)明:身份驗(yàn)證通過(guò)與否標(biāo)記
”’ </summary>
”’ <remarks>程序集或派生類(lèi)可以訪問(wèn)</remarks>
Protected MSecuriPass As Integer
”’ <summary>
”’ 說(shuō)明:’//過(guò)程及函數(shù)授權(quán)等級(jí)
”’ </summary>
”’ <remarks>只能在程序集或者派生類(lèi)中訪問(wèn)</remarks>
Protected MProcLevel As EmpowerLevel
”’ <summary>
”’ 說(shuō)明:錯(cuò)誤信息記錄
”’ </summary>
”’ <remarks></remarks>
Public MErrMessage As String
#End Region
#Region “基類(lèi)相關(guān)屬性”
”’ <summary>
”’ 說(shuō)明:返回過(guò)程及函數(shù)使用的等級(jí)
”’ </summary>
”’ <value></value>
”’ <returns></returns>
”’ <remarks></remarks>
Protected MustOverride ReadOnly Property ProcLevel As EmpowerLevel
”’ <summary>
”’ 說(shuō)明: 類(lèi)調(diào)用前身份驗(yàn)證是否通過(guò)。1=通過(guò),0=不通過(guò)
”’ </summary>
”’ <value></value>
”’ <returns></returns>
”’ <remarks>未通過(guò),則無(wú)法使用調(diào)用類(lèi)</remarks>
Protected MustOverride ReadOnly Property SecuriPass As Integer ‘//驗(yàn)證碼是否通過(guò)。1=通過(guò),0=不通過(guò)
Public MustOverride ReadOnly Property ErrMessage As String ‘//錯(cuò)誤信息反饋
#End Region
”’ <summary>
”’ 說(shuō)明:有些類(lèi)確實(shí)需要不帶參數(shù)的構(gòu)造函數(shù)
”’ </summary>
”’ <remarks>程序集內(nèi)部可以訪問(wèn)</remarks>
Friend Sub New()
MSecuriPass = 0
MProcLevel = EmpowerLevel.Z
MErrMessage = “”
End Sub
”’ <summary>
”’ 說(shuō)明: 聲明的構(gòu)造函數(shù)保證了外部程序集不可繼承該類(lèi)
”’ </summary>
”’ <remarks></remarks>
Friend Sub New(ByVal vUserName As T, ByVal vSecuriKey As V, ByVal vProcKey As P)
MSecuriPass = 0
MProcLevel = EmpowerLevel.Z
MErrMessage = “”
Try
MUserName = vUserName
MSecuriKey = vSecuriKey
MProcKey = vProcKey
MSecuriPass = CheckCode(MUserName, MSecuriKey)
If MSecuriPass = 0 Then
ExportMessage(“Error-1<未被授權(quán)無(wú)法調(diào)用>”)
Exit Sub
End If
‘//進(jìn)行過(guò)程及函數(shù)授權(quán)等級(jí)獲取
MProcLevel = ProcPermission(vProcKey)
Catch ex As Exception
ExportMessage(ex.Message)
Exit Sub
End Try
End Sub
#Region “基類(lèi)相關(guān)函數(shù)及過(guò)程”
”’ <summary>
”’ 說(shuō)明:身份驗(yàn)證函數(shù),輸入用戶及驗(yàn)證碼確認(rèn)無(wú)誤后。返回值1,否則返回值0
”’ </summary>
”’ <param name=”vUserName”>用戶名</param>
”’ <param name=”vCode”>驗(yàn)證碼</param>
”’ <returns>驗(yàn)證通過(guò)1,不通過(guò)=0</returns>
”’ <remarks>當(dāng)前函數(shù)子類(lèi)內(nèi)部可以訪問(wèn)</remarks>
Friend MustOverride Function CheckCode(vUserName As T, vCode As V) As Integer
”’ <summary>
”’ 說(shuō)明:過(guò)程及函數(shù)調(diào)用前的驗(yàn)證。根據(jù)驗(yàn)證碼返回使用等級(jí),不同函數(shù)及過(guò)程劃分幾個(gè)使用等級(jí)
”’ </summary>
”’ <param name=”vCode”>函數(shù)及過(guò)程授權(quán)碼</param>
”’ <returns></returns>
”’ <remarks>當(dāng)前函數(shù)子類(lèi)內(nèi)部可以訪問(wèn)</remarks>
Friend MustOverride Function ProcPermission(vCode As P) As EmpowerLevel
#End Region
End Class
代碼解釋:
其中CheckCode和ProcPermission函數(shù)聲明成friend,其實(shí)是考慮是基類(lèi),繼承子類(lèi)要重寫(xiě),friend函數(shù)只能同類(lèi)庫(kù)中調(diào)用,隱藏類(lèi)庫(kù),防止外部用戶調(diào)用。
此基類(lèi)+后續(xù)編譯加密,可以防止非授權(quán)用戶調(diào)用。
類(lèi)庫(kù)代碼發(fā)布在github,
地址:https://github.com/chenfeng1029/LINKCommon
有興趣的朋友可以下載,幫忙點(diǎn)個(gè)贊。
后續(xù)還要分篇講解類(lèi)庫(kù)數(shù)據(jù)庫(kù)**作的部分,敬請(qǐng)期待,保持關(guān)注。
拓展知識(shí):
vb.net數(shù)據(jù)庫(kù)
VB.net **作Access數(shù)據(jù)庫(kù)的一些常用方法,代碼如下
Imports System
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Collections.Generic
Imports System.Text
Imports System.Data
Imports System.Configuration.ConfigurationSettings
Imports System.Data.OleDb
Public Class DB
Private Shared com As OleDb.OleDbCommand
Private Shared reader As OleDb.OleDbDataReader
Private Shared adapter As OleDb.OleDbDataAdapter
Private Shared conn As OleDb.OleDbConnection
''' <summary>
''' 獲取數(shù)據(jù)庫(kù)連接
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public Shared ReadOnly Property NewConn() As OleDbConnection
Get
Dim connectionString As String
'connectionString = System.Configuration.ConfigurationSettings.GetConfig("Supermarket")
'連接2010數(shù)據(jù)庫(kù)
'connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\GCU.accdb"
'連接03-07數(shù)據(jù)庫(kù)
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\JL\GCU.MDB"
'應(yīng)該在這里先判斷conn是否為Nothing
If conn Is Nothing Then
conn = New OleDb.OleDbConnection(connectionString)
End If
If conn.State <> ConnectionState.Open Then
conn.Open()
End If
Return conn
End Get
End Property
''' <summary>
''' 執(zhí)行增刪改(無(wú)參)
''' </summary>
''' <param name="sql">執(zhí)行的Sql語(yǔ)句</param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNonQuery(ByVal sql As String) As Integer
com = New OleDb.OleDbCommand(sql, NewConn())
Return com.ExecuteNonQuery()
End Function
''' <summary>
''' 執(zhí)行增刪改(有參)
''' </summary>
''' <param name="sql"></param>
''' <param name="para"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNonQuery(ByVal sql As String, ByVal para As OleDbParameter()) As Integer
com = New OleDb.OleDbCommand(sql, NewConn)
com.Parameters.AddRange(para)
Return com.ExecuteNonQuery()
End Function
''' <summary>
''' 執(zhí)行增刪改的存儲(chǔ)過(guò)程
''' </summary>
''' <param name="para"></param>
''' <param name="ProcedureName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ExecuteNonQuery(ByVal para As SqlParameter(), ByVal ProcedureName As String) As Integer
Dim cmd As OleDb.OleDbCommand
cmd = New OleDb.OleDbCommand()
cmd.Connection = NewConn()
cmd.CommandText = ProcedureName
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddRange(para)
Return com.ExecuteNonQuery
End Function
''' <summary>
''' 執(zhí)行查詢(返回一個(gè)結(jié)果集,無(wú)參)
''' </summary>
''' <param name="sql"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetScalar(ByVal sql As String) As String
Dim dataset As DataSet
dataset = New DataSet()
com = New OleDb.OleDbCommand(sql, NewConn)
adapter = New OleDbDataAdapter(com)
adapter.Fill(dataset)
If dataset.Tables.Count > 0 And dataset.Tables(0).Rows.Count > 0 Then
Return dataset.Tables(0).Rows(0)(0).ToString()
End If
Return "Null"
End Function
''' <summary>
''' 執(zhí)行查詢(返回一個(gè)結(jié)果集,有參)
''' </summary>
''' <param name="sql"></param>
''' <param name="para"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetScalar(ByVal sql As String, ByVal para As SqlParameter()) As Integer
com = New OleDb.OleDbCommand(sql, NewConn)
com.Parameters.AddRange(para)
Return Convert.ToInt32(com.ExecuteScalar())
End Function
''' <summary>
''' 執(zhí)行查詢(返回一行數(shù)據(jù),無(wú)參)
''' </summary>
''' <param name="sql"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetReader(ByVal sql As String) As OleDbDataReader
com = New OleDb.OleDbCommand(sql, NewConn)
reader = com.ExecuteReader()
Return reader
End Function
''' <summary>
''' 執(zhí)行查詢(返回一行數(shù)據(jù),有參)
''' </summary>
''' <param name="sql"></param>
''' <param name="para"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetReader(ByVal sql As String, ByVal para As SqlParameter()) As OleDbDataReader
com = New OleDb.OleDbCommand(sql, NewConn)
com.Parameters.AddRange(para)
reader = com.ExecuteReader()
Return reader
End Function
''' <summary>
''' 執(zhí)行查詢(返回一個(gè)數(shù)據(jù)集,無(wú)參)
''' </summary>
''' <param name="sql"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetDataSet(ByVal sql As String) As DataTable
Dim dataset As DataSet
dataset = New DataSet()
com = New OleDb.OleDbCommand(sql, NewConn)
adapter = New OleDbDataAdapter(com)
adapter.Fill(dataset)
Return dataset.Tables(0)
End Function
''' <summary>
''' 執(zhí)行查詢(返回一個(gè)數(shù)據(jù)集,有參)
''' </summary>
''' <param name="sql"></param>
''' <param name="para"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetDataSet(ByVal sql As String, ByVal para As SqlParameter()) As DataTable
Dim dataset As DataSet
dataset = New DataSet()
com = New OleDbCommand(sql, NewConn)
com.Parameters.AddRange(para)
adapter = New OleDbDataAdapter(com)
adapter.Fill(dataset)
Return dataset.Tables(0)
End Function
End Class
原創(chuàng)文章,作者:九賢生活小編,如若轉(zhuǎn)載,請(qǐng)注明出處:http:///91428.html