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