前沿拓展:
vb.net数据库
先从数损取夜着回力民植略移未据库中获取到要添加的值
sql = “select vb_query").Rows(i).Item(0))
next
1、安全身份验证基类重要性
为何要在讲解数据库**作核心类库前,需要讲解此基类。主要是基于以下几个因素:
相对安全性
既然是核心数据库**作类库,很大程度上,并不希望无关人员调用此类库,尤其是在企业内部或者第三方开发的应用程序被其他用户调用。
授权等级
同一团队合作中,为了管控每个用户的使用数据库**作等级。例如某个开发用户A,可从此类库调用的函数,只能是读取数据库,删除和更新则没有;某个开发用户B,可以调用此类库的读取、更新等**作数据库的函数,但函数提供的参数不一样,不可使用事务**作。
后续授权扩展可用性
此基类,可以让其他类库继承,并不一定只限制与**作数据库的内容;有些类库只属于核心团队调用;有些类库是普通团队也可以,各自开发组群根据各自需要自行设置安全等级参数。
2、授权等级设置
设置一个授权等级的枚举类型:
”’ <summary>
”’ 说明:授权等级
”’ </summary>
”’ <remarks></remarks>
Public Enum EmpowerLevel
A = 1
B = 2
C = 3
D = 4
E = 5
F = 6
Z = 50
End Enum
授权等级从A-Z,意味着从高到低,授权等级越高,今后涉及到开发类库中,可调用的函数会越多。
如果你想A1,A2,A3怎么设置也一样,这个只是为了今后调用方案,统一这么设置。内部开发团队了解就ok,只是一个**作规范而已。
3、身份验证类库设计思路
属性信息设置
用户名
我们需要提高给开发用户一个账户,也是其唯一用户ID
授权信息
此用户授权信息是加密的信息,判断用户是否被授权调用此类库
校验码
此校验码,是在授权验证通过,提取用户的授权等级
授权验证通过
授权验证完毕后,返回一个属性,记录通过还是不通过,如果不通过,则直接强制退出
授权等级
最后验证完毕后,返回授权等级
返回信息
如果验证失败,则返回提示信息
方法设置
授权校验函数
对于授权码的验证,确定是否授权,授权通过,则返回授权验证通过
获取授权等级函数
在授权验证通过后,根据校验码,返回授权等级。
设计参数类型
为了类型使用并不确定,也为方便**作,此基类的相关参数采用泛型。
主要是定义VB.NET泛型类型时,即使用一个或多个数据类型将其参数化。这样可允许使用代码定制数据类型以满足其要求。代码可以通过泛型元素声明若干个不同的编程元素,每个元素可使用一组不同的数据类型。但是,无论声明的元素使用哪些数据类型,它们均执行相同的逻辑。
具体介绍,可以参考VB.net学习笔记(十九)数组、**、泛型 ,里面讲的不错。当然也可以在百度里搜索下VB.NET 泛型
基本的思路已经构造完毕,剩下编写代码
”’ <summary>
”’ 创建时间:2019.8.10
”’ 作者: kevin zhu
”’ 说明:安全身份验证基类,继承此基类的子类要重写
”’ </summary>
”’ <typeparam name=”T”>泛型参数,可以是用户ID</typeparam>
”’ <typeparam name=”V”>泛型参数,默认是类授权码</typeparam>
”’ <typeparam name=”P”>泛型参数,默认是过程及函数授权码</typeparam>
”’ <remarks></remarks>
Public MustInherit Class SecuriVerify(Of T, V, P)
#Region “基类相关参数”
”’ <summary>
”’ 说明:授权用户名
”’ </summary>
”’ <remarks>只能程序集里访问</remarks>
Friend MUserName As T ‘//用户名
”’ <summary>
”’ 说明: 类使用的授权码
”’ </summary>
”’ <remarks>只能程序集里访问</remarks>
Friend MSecuriKey As V ‘//类授权码
”’ <summary>
”’ 说明:类里面的函数及过程调用的授权码
”’ </summary>
”’ <remarks>只能程序集里访问</remarks>
Friend MProcKey As P ‘//类中函数及过程授权码
”’ <summary>
”’ 说明:身份验证通过与否标记
”’ </summary>
”’ <remarks>程序集或派生类可以访问</remarks>
Protected MSecuriPass As Integer
”’ <summary>
”’ 说明:’//过程及函数授权等级
”’ </summary>
”’ <remarks>只能在程序集或者派生类中访问</remarks>
Protected MProcLevel As EmpowerLevel
”’ <summary>
”’ 说明:错误信息记录
”’ </summary>
”’ <remarks></remarks>
Public MErrMessage As String
#End Region
#Region “基类相关属性”
”’ <summary>
”’ 说明:返回过程及函数使用的等级
”’ </summary>
”’ <value></value>
”’ <returns></returns>
”’ <remarks></remarks>
Protected MustOverride ReadOnly Property ProcLevel As EmpowerLevel
”’ <summary>
”’ 说明: 类调用前身份验证是否通过。1=通过,0=不通过
”’ </summary>
”’ <value></value>
”’ <returns></returns>
”’ <remarks>未通过,则无法使用调用类</remarks>
Protected MustOverride ReadOnly Property SecuriPass As Integer ‘//验证码是否通过。1=通过,0=不通过
Public MustOverride ReadOnly Property ErrMessage As String ‘//错误信息反馈
#End Region
”’ <summary>
”’ 说明:有些类确实需要不带参数的构造函数
”’ </summary>
”’ <remarks>程序集内部可以访问</remarks>
Friend Sub New()
MSecuriPass = 0
MProcLevel = EmpowerLevel.Z
MErrMessage = “”
End Sub
”’ <summary>
”’ 说明: 声明的构造函数保证了外部程序集不可继承该类
”’ </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<未被授权无法调用>”)
Exit Sub
End If
‘//进行过程及函数授权等级获取
MProcLevel = ProcPermission(vProcKey)
Catch ex As Exception
ExportMessage(ex.Message)
Exit Sub
End Try
End Sub
#Region “基类相关函数及过程”
”’ <summary>
”’ 说明:身份验证函数,输入用户及验证码确认无误后。返回值1,否则返回值0
”’ </summary>
”’ <param name=”vUserName”>用户名</param>
”’ <param name=”vCode”>验证码</param>
”’ <returns>验证通过1,不通过=0</returns>
”’ <remarks>当前函数子类内部可以访问</remarks>
Friend MustOverride Function CheckCode(vUserName As T, vCode As V) As Integer
”’ <summary>
”’ 说明:过程及函数调用前的验证。根据验证码返回使用等级,不同函数及过程划分几个使用等级
”’ </summary>
”’ <param name=”vCode”>函数及过程授权码</param>
”’ <returns></returns>
”’ <remarks>当前函数子类内部可以访问</remarks>
Friend MustOverride Function ProcPermission(vCode As P) As EmpowerLevel
#End Region
End Class
代码解释:
其中CheckCode和ProcPermission函数声明成friend,其实是考虑是基类,继承子类要重写,friend函数只能同类库中调用,隐藏类库,防止外部用户调用。
此基类+后续编译加密,可以防止非授权用户调用。
类库代码发布在github,
地址:https://github.com/chenfeng1029/LINKCommon
有兴趣的朋友可以下载,帮忙点个赞。
后续还要分篇讲解类库数据库**作的部分,敬请期待,保持关注。
拓展知识:
vb.net数据库
VB.net **作Access数据库的一些常用方法,代码如下
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>
''' 获取数据库连接
''' </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数据库
'connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\GCU.accdb"
'连接03-07数据库
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\JL\GCU.MDB"
'应该在这里先判断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>
''' 执行增删改(无参)
''' </summary>
''' <param name="sql">执行的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>
''' 执行增删改(有参)
''' </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>
''' 执行增删改的存储过程
''' </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>
''' 执行查询(返回一个结果集,无参)
''' </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>
''' 执行查询(返回一个结果集,有参)
''' </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>
''' 执行查询(返回一行数据,无参)
''' </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>
''' 执行查询(返回一行数据,有参)
''' </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>
''' 执行查询(返回一个数据集,无参)
''' </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>
''' 执行查询(返回一个数据集,有参)
''' </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
原创文章,作者:九贤生活小编,如若转载,请注明出处:http://www.wangguangwei.com/91428.html