.NET操作中,核心部分就是对于数据库的操作其中涉及读取数据、更新数据、采用事务操作等等,下面我们就来聊聊关于vb 数据库应用实例?接下来我们就一起去了解一下吧!

vb 数据库应用实例(VB.NET数据库操作核心类库-第02篇)

vb 数据库应用实例

.NET操作中,核心部分就是对于数据库的操作。其中涉及读取数据、更新数据、采用事务操作等等。

上一篇,在写此核心类库前的准备,身份验证类。因为现在操作基本以SQL Server数据库操作居多,因此此类库操作以ms SQL为主。

1、新类库继承

由于身份验证类是基类,继承后需要对于基类函数进行重写。

''' <summary> ''' 2019.8.12 ''' 操作数据库类库 ''' </summary> Public Class BaseSql Inherits SecuriVerify(Of string,string,string) Public OverriDes ReadOnly Property ErrMessage As String Get Throw New NotImplementedException() End Get End Property Protected Overrides ReadOnly Property ProcLevel As EmpowerLevel Get Throw New NotImplementedException() End Get End Property Protected Overrides ReadOnly Property SecuriPass As Integer Get Throw New NotImplementedException() End Get End Property Protected Overrides Sub ExportMessage(vMsg As String) Throw New NotImplementedException() End Sub Friend Overrides Function CheckCode(vUserName As String, vCode As String) As Integer Throw New NotImplementedException() End Function Friend Overrides Function ProcPermission(vCode As String) As EmpowerLevel Throw New NotImplementedException() End Function End Class

其中继承基类 SecuriVerify 定义泛型参数,在继承的时候为了后续方便操作,默认string类型

2、类库重构

对于类库今后的调用重构函数设计就显得比较重要,此为调用类库入口

设计思路:

''' <summary> ''' 说明:重构 ''' </summary> ''' <param name="vUserName">用户名</param> ''' <param name="vSecuriKey">类授权代码</param> ''' <param name="vProcKey">过程及函数使用授权码</param> ''' <remarks></remarks> Public Sub New(ByVal vUserName As String, ByVal vSecuriKey As String, ByVal vProcKey As String) MyBase.New(vUserName, vSecuriKey, vProcKey) End Sub

''' <summary> ''' 创建时间:2019.8.12 ''' 说明:类调用身份验证结构类 ''' </summary> ''' <remarks></remarks> Public Structure UserSecurity Public UserName As String '//用户名 Public SecuriKey As String '//类验证码 Public ProcKey As String '//类过程及函数验证 End Structure

''' <summary> ''' 说明:重构函数 ''' </summary> ''' <param name="vUserSecurity">用户安全认证信息</param> ''' <remarks></remarks> Public Sub New(ByVal vUserSecurity As UserSecurity) MyBase.New(vUserSecurity.UserName, vUserSecurity.SecuriKey, vUserSecurity.ProcKey) End Sub

MyBase关键字的行为方式类似于引用当前类实例的基类的对象变量;

MyBase 通常用于访问派生类中被重写或被隐藏的基类成员;

MyBase.New 用于从派生类构造函数中显式调用基类构造函数;

MyBase只能引用直接父类,无法继续沿继承链向上定位;

通俗说法:通过DataAdapter从数据库读取数据,建立一个离线数据库dataset,并且创建一个datatable(数据库表),用户可以操作和读取此表,这个好处在于可以离线作业,不像早期的ADO,都是在线操作,人数使用较多考验数据库性能。

我们可以先看源码,看函数ExecuteDataset

''' <summary> ''' 说明:执行查询sqlcommand,返回记录集Dataset ''' </summary> ''' <param name="vSqlcon">sqlconnection参数</param> ''' <param name="vcommandType">命令类型</param> ''' <param name="vcommandText">SQL查询语句</param> ''' <param name="vSqlpara">参数数组</param> ''' <returns>数据记录集Dataset</returns> ''' <remarks></remarks> Friend Overloads Function ExecuteDataset(ByVal vSqlcon As SqlConnection, ByVal vcommandType As CommandType, ByVal vcommandText As String, ByVal ParamArray vSqlpara() As SqlParameter) As DataSet Dim vSqlcmd As New SqlCommand() Dim ds As New DataSet() Dim da As SqlDataAdapter Try '//配置sqlcommand '//如果连接未打开,则打开连接 If vSqlcon.State <> ConnectionState.Open Then vSqlcon.Open() End If With vSqlcmd '//设置sqlcommand对应数据库连接 .CommandTimeout = MConnectionTimeOut .Connection = vSqlcon .CommandText = vcommandText '//操作SQL命令 .CommandType = vcommandType '//命令操作类型 '//如果存在参数数组,则添加到sqlcommand If Not (vSqlpara Is Nothing) Then ' AttachParameters(vSqlcmd, vSqlpara) Dim p As SqlParameter For Each p In vSqlpara '//参数可输出也 可输入 If p.Direction = ParameterDirection.InputOutput And p.Value Is Nothing Then p.Value = Nothing End If '对于存储过程,有些参数是输出 If p.Direction = ParameterDirection.Output Then '//sqlcommand添加参数变量 vSqlcmd.Parameters.Add(p).Direction = ParameterDirection.Output Else '//sqlcommand添加参数变量 vSqlcmd.Parameters.Add(p) End If Next End If End With 'create the DataAdapter & DataSet da = New SqlDataAdapter(vSqlcmd) da.Fill(ds) '//清理sqlpara vSqlcmd.Parameters.Clear() '关闭连接池 F_CancelConn(vSqlcon) Catch ex As Exception '//销毁链接及操作命令 F_CancelConn(vSqlcon) F_CancelCommand(vSqlcmd) ExportMessage(ex.Message) '传输错误信息出去 End Try Return ds End Function

为何写成Friend Public,此函数为核心函数,并不想让用户直接调用,不方便控制用户调用权限。我们集成身份验证基类目的就是管控权限,自然不可能让用户直接调用此函数,因此我们需要重新创建一个调用函数

调用函数F_GetDataTable

''' <summary> ''' 说明:执行查询SQL语句,返回记录集内存库表DataTable ''' </summary> ''' <param name="commandText">数据库链接字符串</param> ''' <param name="commandType">命令类型</param> ''' <param name="commandParameters">SQL语句</param> ''' <param name="vConnection">数据库链接字符串</param> ''' <returns>返回内存库表DataTable</returns> ''' <remarks></remarks> Public Overloads Function F_GetDataTable( ByVal commandText As String, ByVal commandType As CommandType, ByVal commandParameters As SqlParameter(), ByVal vConnection As String) As DataTable Dim dt As New DataTable If MProcLevel > EmpowerLevel.D Then ExportMessage("你无权限调用此函数") Return dt Else '//数据库链接字符串 Dim cn As New SqlConnection(vConnection) Dim ds As New DataSet Try If cn.State <> ConnectionState.Open Then cn.Open() End If ds = ExecuteDataset(cn, commandType, commandText, commandParameters) dt = ds.Tables(0) Return dt Finally cn.Dispose() End Try Return dt End If End Function

此函数在调用前,会验证用户的授权等级,来决定是否可以调用。这个等级设置,开发用户可以根据函数的重要性和功能性来决定调用等级。

上述是通过http://ADO.NET查询数据库,返回记录的操作,通过继承身份验证基类,提高函数的安全性,再加上加密工具,基本可以保证类库不被随便调用。

后续还要讲解数据库更新操作函数,敬请期待第三篇

类库源码放在github ,喜欢的朋友可以下载,顺便帮忙点个赞。

https://github.com/chenfeng1029/LINKCommon

,