`
wsql
  • 浏览: 11777783 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

VB.net版本的数据库访问类DataBaseAccess

 
阅读更多
在开发一个VB.net的项目时,曾经整理出了一个DataBaseAccess的访问类,现在将该类分享下:
Imports System
Imports System.IO
Imports System.Text
Imports System.Data
Imports System.Data.SqlClient


Namespace SqlDataProvider

Public Class DataBaseAccess

#Region "Local Property Declaration"

Dim _connectionString As String

#End Region

#Region " Constructor "

''' <summary>
''' Initializes a new instance of the ADO.SqlDatabase class.
''' </summary>
''' <param name="connectionString">The connection used to open the SQL Server database.</param>
Public Sub New(ByVal connectionString As String)
_connectionString = connectionString
End Sub

#End Region

#Region " Public Properties "

''' <summary>
''' Gets or sets the string used to open a SQL Server database.
''' </summary>
''' <returns>The connection string that includes the source database name, and other parameters needed to establish the initial connection.</returns>
Public Property ConnectionString() As String
Get
Return _connectionString
End Get
Set(ByVal value As String)
_connectionString = value
End Set
End Property

#End Region

#Region " Private Methods "

Private Sub AssignParameters(ByVal cmd As SqlCommand, ByVal cmdParameters() As SqlParameter)
If (cmdParameters Is Nothing) Then Exit Sub
For Each p As SqlParameter In cmdParameters
cmd.Parameters.Add(p)
Next
End Sub

Private Sub AssignParameters(ByVal cmd As SqlCommand, ByVal parameterValues() As Object)
If Not (cmd.Parameters.Count - 1 = parameterValues.Length) Then Throw New ApplicationException("Stored procedure's parameters and parameter values does not match.")
Dim i As Integer
For Each param As SqlParameter In cmd.Parameters
If Not (param.Direction = ParameterDirection.Output) AndAlso Not (param.Direction = ParameterDirection.ReturnValue) Then
param.Value = parameterValues(i)
i += 1
End If
Next
End Sub

#End Region

#Region " ExecuteNonQuery "

''' <summary>
''' Executes a Transact-SQL statement against the connection and returns the number of rows affected.
''' </summary>
''' <param name="cmd">The Transact-SQL statement or stored procedure to execute at the data source.</param>
''' <param name="cmdType">A value indicating how the System.Data.SqlClient.SqlCommand.CommandText property is to be interpreted.</param>
''' <param name="parameters">The parameters of the Transact-SQL statement or stored procedure.</param>
''' <returns>The number of rows affected.</returns>
Public Function ExecuteNonQuery(ByVal cmd As String, ByVal cmdType As CommandType, Optional ByVal parameters() As SqlParameter = Nothing) As Integer
Dim connection As SqlConnection = Nothing
Dim transaction As SqlTransaction = Nothing
Dim command As SqlCommand = Nothing
Dim res As Integer = -1
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(cmd, connection)
command.CommandType = cmdType
Me.AssignParameters(command, parameters)
connection.Open()
transaction = connection.BeginTransaction()
command.Transaction = transaction
res = command.ExecuteNonQuery()
transaction.Commit()
Catch ex As Exception
If Not (transaction Is Nothing) Then
transaction.Rollback()
End If
Throw New Exception(ex.Message, ex.InnerException)
Finally
If Not (connection Is Nothing) AndAlso (connection.State = ConnectionState.Open) Then connection.Close()
If Not (command Is Nothing) Then command.Dispose()
If Not (transaction Is Nothing) Then transaction.Dispose()
End Try
Return res
End Function

''' <summary>
''' Executes a Transact-SQL statement against the connection and returns the number of rows affected.
''' </summary>
''' <param name="spname">The stored procedure to execute at the data source.</param>
''' <param name="returnValue">The returned value from stored procedure.</param>
''' <param name="parameterValues">The parameter values of the stored procedure.</param>
''' <returns>The number of rows affected.</returns>
Public Function ExecuteNonQuery(ByVal spname As String, ByRef returnValue As Integer, ByVal ParamArray parameterValues() As Object) As Integer
Dim connection As SqlConnection = Nothing
Dim transaction As SqlTransaction = Nothing
Dim command As SqlCommand = Nothing
Dim res As Integer = -1
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(spname, connection)
command.CommandType = CommandType.StoredProcedure
connection.Open()
SqlCommandBuilder.DeriveParameters(command)
Me.AssignParameters(command, parameterValues)
transaction = connection.BeginTransaction()
command.Transaction = transaction
res = command.ExecuteNonQuery()
returnValue = command.Parameters(0).Value
transaction.Commit()
Catch ex As Exception
If Not (transaction Is Nothing) Then
transaction.Rollback()
End If
Throw New Exception(ex.Message, ex.InnerException)
Finally
If Not (connection Is Nothing) AndAlso (connection.State = ConnectionState.Open) Then connection.Close()
If Not (command Is Nothing) Then command.Dispose()
If Not (transaction Is Nothing) Then transaction.Dispose()
End Try
Return res
End Function

#End Region

#Region " ExecuteScalar "

''' <summary>
''' Executes the query, and returns the first column of the first row in the result set returned by the query. Additional columns or rows are ignored.
''' </summary>
''' <param name="cmd">The Transact-SQL statement or stored procedure to execute at the data source.</param>
''' <param name="cmdType">A value indicating how the System.Data.SqlClient.SqlCommand.CommandText property is to be interpreted.</param>
''' <param name="parameters">The parameters of the Transact-SQL statement or stored procedure.</param>
''' <returns>The first column of the first row in the result set, or a null reference if the result set is empty.</returns>
Public Function ExecuteScalar(ByVal cmd As String, ByVal cmdType As CommandType, Optional ByVal parameters() As SqlParameter = Nothing) As Object
Dim connection As SqlConnection = Nothing
Dim transaction As SqlTransaction = Nothing
Dim command As SqlCommand = Nothing
Dim res As Object = Nothing
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(cmd, connection)
command.CommandType = cmdType
Me.AssignParameters(command, parameters)
connection.Open()
transaction = connection.BeginTransaction()
command.Transaction = transaction
res = command.ExecuteScalar()
transaction.Commit()
Catch ex As Exception
If Not (transaction Is Nothing) Then
transaction.Rollback()
End If
Throw New Exception(ex.Message, ex.InnerException)
Finally
If Not (connection Is Nothing) AndAlso (connection.State = ConnectionState.Open) Then connection.Close()
If Not (command Is Nothing) Then command.Dispose()
If Not (transaction Is Nothing) Then transaction.Dispose()
End Try
Return res
End Function

''' <summary>
''' Executes the query, and returns the first column of the first row in the result set returned by the query. Additional columns or rows are ignored.
''' </summary>
''' <param name="spname">The stored procedure to execute at the data source.</param>
''' <param name="returnValue">The returned value from stored procedure.</param>
''' <param name="parameterValues">The parameter values of the stored procedure.</param>
''' <returns>The first column of the first row in the result set, or a null reference if the result set is empty.</returns>
Public Function ExecuteScalar(ByVal spname As String, ByRef returnValue As Integer, ByVal ParamArray parameterValues() As Object) As Object
Dim connection As SqlConnection = Nothing
Dim transaction As SqlTransaction = Nothing
Dim command As SqlCommand = Nothing
Dim res As Object = Nothing
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(spname, connection)
command.CommandType = CommandType.StoredProcedure
connection.Open()
SqlCommandBuilder.DeriveParameters(command)
Me.AssignParameters(command, parameterValues)
transaction = connection.BeginTransaction()
command.Transaction = transaction
res = command.ExecuteScalar()
returnValue = command.Parameters(0).Value
transaction.Commit()
Catch ex As Exception
If Not (transaction Is Nothing) Then
transaction.Rollback()
End If
Throw New Exception(ex.Message, ex.InnerException)
Finally
If Not (connection Is Nothing) AndAlso (connection.State = ConnectionState.Open) Then connection.Close()
If Not (command Is Nothing) Then command.Dispose()
If Not (transaction Is Nothing) Then transaction.Dispose()
End Try
Return res
End Function

#End Region

#Region " ExecuteReader "

''' <summary>
''' Sends the System.Data.SqlClient.SqlCommand.CommandText to the System.Data.SqlClient.SqlCommand.Connection, and builds a System.Data.SqlClient.SqlDataReader using one of the System.Data.CommandBehavior values.
''' </summary>
''' <param name="cmd">The Transact-SQL statement or stored procedure to execute at the data source.</param>
''' <param name="cmdType">A value indicating how the System.Data.SqlClient.SqlCommand.CommandText property is to be interpreted.</param>
''' <param name="parameters">The parameters of the Transact-SQL statement or stored procedure.</param>
''' <returns>A System.Data.SqlClient.SqlDataReader object.</returns>
Public Function ExecuteReader(ByVal cmd As String, ByVal cmdType As CommandType, Optional ByVal parameters() As SqlParameter = Nothing) As IDataReader
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Dim res As SqlDataReader = Nothing
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(cmd, connection)
command.CommandType = cmdType
Me.AssignParameters(command, parameters)
connection.Open()
res = command.ExecuteReader(CommandBehavior.CloseConnection)
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
End Try
Return CType(res, IDataReader)
End Function

''' <summary>
''' Sends the System.Data.SqlClient.SqlCommand.CommandText to the System.Data.SqlClient.SqlCommand.Connection, and builds a System.Data.SqlClient.SqlDataReader using one of the System.Data.CommandBehavior values.
''' </summary>
''' <param name="spname">The stored procedure to execute at the data source.</param>
''' <param name="returnValue">The returned value from stored procedure.</param>
''' <param name="parameterValues">The parameter values of the stored procedure.</param>
''' <returns>A System.Data.SqlClient.SqlDataReader object.</returns>
Public Function ExecuteReader(ByVal spname As String, ByRef returnValue As Integer, ByVal ParamArray parameterValues() As Object) As IDataReader
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Dim res As SqlDataReader = Nothing
Try
connection = New SqlConnection(ConnectionString)
command = New SqlCommand(spname, connection)
command.CommandType = CommandType.StoredProcedure
connection.Open()
SqlCommandBuilder.DeriveParameters(command)
Me.AssignParameters(command, parameterValues)
res = command.ExecuteReader(CommandBehavior.CloseConnection)
returnValue = command.Parameters(0).Value
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
End Try
Return CType(res, IDataReader)
End Function

#End Region

#Region " FillDataset "

''' <summary>
''' Adds or refreshes rows in the System.Data.DataSet to match those in the data source using the System.Data.DataSet name, and creates a System.Data.DataTable named "Table."
''' </summary>
''' <param name="cmd">The Transact-SQL statement or stored procedure to execute at the data source.</param>
''' <param name="cmdType">A value indicating how the System.Data.SqlClient.SqlCommand.CommandText property is to be interpreted.</param>
''' <param name="parameters">The parameters of the Transact-SQL statement or stored procedure.</param>
''' <returns>A System.Data.Dataset object.</returns>
Public Function FillDataset(ByVal cmd As String, ByVal cmdType As CommandType, Optional ByVal parameters() As SqlParameter = Nothing) As DataSet
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Dim sqlda As SqlDataAdapter = Nothing
Dim res As New DataSet
Try
connection = New SqlConnection(_connectionString)
command = New SqlCommand(cmd, connection)
command.CommandType = cmdType
AssignParameters(command, parameters)
sqlda = New SqlDataAdapter(command)
sqlda.Fill(res)
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Finally
If Not (connection Is Nothing) Then connection.Dispose()
If Not (command Is Nothing) Then command.Dispose()
If Not (sqlda Is Nothing) Then sqlda.Dispose()
End Try
Return res
End Function

#End Region

#Region " ExecuteDataset "

''' <summary>
''' Calls the respective INSERT, UPDATE, or DELETE statements for each inserted, updated, or deleted row in the System.Data.DataSet with the specified System.Data.DataTable name.
''' </summary>
''' <param name="insertCmd">A command used to insert new records into the data source.</param>
''' <param name="updateCmd">A command used to update records in the data source.</param>
''' <param name="deleteCmd">A command for deleting records from the data set.</param>
''' <param name="ds">The System.Data.DataSet to use to update the data source. </param>
''' <param name="srcTable">The name of the source table to use for table mapping.</param>
''' <returns>The number of rows successfully updated from the System.Data.DataSet.</returns>
Public Function ExecuteDataset(ByVal insertCmd As SqlCommand, ByVal updateCmd As SqlCommand, ByVal deleteCmd As SqlCommand, ByVal ds As DataSet, ByVal srcTable As String) As Integer
Dim connection As SqlConnection = Nothing
Dim sqlda As SqlDataAdapter = Nothing
Dim res As Integer = 0
Try
connection = New SqlConnection(_connectionString)
sqlda = New SqlDataAdapter
If Not (insertCmd Is Nothing) Then insertCmd.Connection = connection : sqlda.InsertCommand = insertCmd
If Not (updateCmd Is Nothing) Then updateCmd.Connection = connection : sqlda.UpdateCommand = updateCmd
If Not (deleteCmd Is Nothing) Then deleteCmd.Connection = connection : sqlda.DeleteCommand = deleteCmd
res = sqlda.Update(ds, srcTable)
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Finally
If Not (connection Is Nothing) Then connection.Dispose()
If Not (insertCmd Is Nothing) Then insertCmd.Dispose()
If Not (updateCmd Is Nothing) Then updateCmd.Dispose()
If Not (deleteCmd Is Nothing) Then deleteCmd.Dispose()
If Not (sqlda Is Nothing) Then sqlda.Dispose()
End Try
Return res
End Function

#End Region

#Region " ExecuteScript "

''' <summary>
''' Executes a SQL query file against the connection.
''' </summary>
''' <param name="filename">SQL query file name.</param>
''' <param name="parameters">The parameters of the SQL query file.</param>
Public Sub ExecuteScript(ByVal filename As String, Optional ByVal parameters() As SqlParameter = Nothing)
Dim fStream As FileStream = Nothing
Dim sReader As StreamReader = Nothing
Dim connection As SqlConnection = Nothing
Dim command As SqlCommand = Nothing
Try
fStream = New FileStream(filename, FileMode.Open, FileAccess.Read)
sReader = New StreamReader(fStream)
connection = New SqlConnection(ConnectionString)
command = connection.CreateCommand()
connection.Open()
While (Not sReader.EndOfStream)
Dim sb As New StringBuilder
While (Not sReader.EndOfStream)
Dim s As String = sReader.ReadLine
If (Not String.IsNullOrEmpty(s)) AndAlso (s.ToUpper.Trim = "GO") Then
Exit While
End If
sb.AppendLine(s)
End While
command.CommandText = sb.ToString
command.CommandType = CommandType.Text
AssignParameters(command, parameters)
command.ExecuteNonQuery()
End While
Catch ex As Exception
Throw New Exception(ex.Message, ex.InnerException)
Finally
If (Not IsNothing(connection)) AndAlso (connection.State = ConnectionState.Open) Then connection.Close()
If (Not IsNothing(command)) Then command.Dispose()
If (Not IsNothing(sReader)) Then sReader.Close()
If (Not IsNothing(fStream)) Then fStream.Close()
End Try
End Sub

#End Region


End Class

End Namespace

分享到:
评论

相关推荐

    图书管理系统源代码

    MessageBox.Show("连接不到数据库LibraryMis,请在“数据库访问设置窗体中对数据库访问进行正确的设置”" + ",取消登录后重新启动图书馆管理系统!","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning ); //...

    DatabaseAccess:一种设计为易于重用的系统,可为统一的外观提供简单的接口,并具有简单的接口,可连接多种基础数据库实现范例(noSQL,Relational)和技术

    数据库访问 一种旨在易于重用的系统,可为统一的外观提供简单的界面,并可以将其集成到多个基础数据库实现范例(noSQL,Relational)和技术中。

    JAVA WEB框架,java网站一个模块只用写一个文件

    |___Hyberbin.java 进一步封装了数据库的操作,用户不直接对数据库操作,只要给出实体POJO类,数据可以自动查询、修改、删除、插入 servlet 用户自己的包,完成相应模块的功能。 |___Szdw.java POJO类,对应数据库...

    PassVault:密码记忆申请

    将其命名为有意义的示例,例如:LoginRequest,PasswordList,DatabaseAccess等(不带下划线“ _”,不带连字符“-”,不带空格“”) 布局文件(.xml)的各自活动应具有相同的名称,且大小写和单词之间不能使用...

    Rain Water Algorithm雨水优化算法附matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于springboot+vue的房屋租赁出售系统

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    杭电-[数据结构(c语言版)]复习题纲杭州电子科技大学.pdf

    杭州电子科技大学,期末考试资料,计算机专业期末考试试卷,试卷及答案,数据结构。

    年医院医生个人工作总结.docx

    工作总结,新年计划,岗位总结,工作汇报,个人总结,述职报告,范文下载,新年总结,新建计划。

    阿里巴巴笔试题目.docx

    校园招聘笔试题目及答案

    顺从宗族联动机器人matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip

    基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于Python的图像阴影检测与去除源码(高分期末大作业项目).zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于Python的图像阴影检

    Android阅读器源码

    Android阅读器源码是用于在Android平台上开发电子书阅读器应用的源代码。阅读器可以支持多种电子书格式,如EPUB、PDF、TXT等,并提供诸如翻页、搜索、书签、夜间模式等功能。

    该项目包含为与用户合作的微电网能源管理系统的多目标优化而开发的matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    人力资源数据分析看版.xlsx

    Excel数据看板,Excel办公模板,Excel模板下载,Excel数据统计,数据展示

    MS15-058 SQL Server 2008 R2 Service Pack 3 补丁包

    MS15-058 SQL Server 2008 R2 Service Pack 3 SQLServer2008R2-KB3045314-x64 不太好找,找到了,就分享一下吧

    基于LabView+MATLAB的说话人识别系统.zip

    labview 与 C 和BASIC 一样,LabVIEW [2]也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW [3]的函数库包括数据采集、GPIB、串口控制、数据分析、数据显示及数据存储,等等。LabVIEW [3]也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。 LabVIEW [2](Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而 LabVIEW 则采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是 LabVIEW 的程序模块。 LabVIEW [2] 提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在 LabVIEW 中被称为前面板。使用图标和连线,可以通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。

    JavaSE技术题Java开发过程中的面试

    JavaSE技术题Java开发过程中的面试

    Python实现基于深度学习的预测区域电力负荷模型源码+项目说明(高分项目).zip

    Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于深度学习的预测区域电力负荷模型源码+项目说明.zip已获导师指导并通过的97分的高分期末大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 Python实现基于

    会创意年会策划.docx

    年会班会资料,节目策划,游戏策划,策划案,策划方案,活动方案,筹办,公司年会,开场白,主持人,策划主题,主持词,小游戏。

    基于物联网MQTT协议的智能停车场管理系统

    基于物联网MQTT协议的智能停车场管理系统 本项目为Eclipse搭建的Maven Web项目 前端采用BootStrap框架 后端采用SSM框架 主要特点: 1.管理员与用户两大功能组 2.基于Apache Apollo服务器的MQTT通信,用于实现地锁装置与管理系统的通信 3.采用第三方微信支付BufPay

Global site tag (gtag.js) - Google Analytics