利用Command创建执行SQL语句的模块

简介:     最近两天开始为机房收费系统编写代码了,在机房收费系统中,最核心的代码就是执行SQL语句,返回一个Recordset对象的过程,有这样功能的代码我们以前在学生信息管理系统中接触过: Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset '本函数的功能是执行SQL语句,并返回结果集(传递参数SQL传递查询语句,MsgString传递查询信息。

    最近两天开始为机房收费系统编写代码了,在机房收费系统中,最核心的代码就是执行SQL语句,返回一个Recordset对象的过程,有这样功能的代码我们以前在学生信息管理系统中接触过:

Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset '本函数的功能是执行SQL语句,并返回结果集(传递参数SQL传递查询语句,MsgString传递查询信息。自身以一个数据集对象的形式返回

    
    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim sTokens() As String       ' 定义一个字符串数组,来保存分隔后的字符
    
    On Error GoTo ExecuteSQL_Error     '错误处理
    
    sTokens = Split(SQL)   '将SQL按空格分成字符串数组,保存在sToken()字符数组中
    '创建连接
    Set cnn = New ADODB.Connection
    cnn.Open ConnectString
    
    If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then   '如果stoken(0)中的第一个字符是以上四个单词之一,则向下进行(此处加上了SELECT一词,因为在登录时,有选择这一项)
        '执行查询语句
        cnn.Execute SQL             '利用ADODB.Connection对象的Execute方法执行sql语句的查询
        '返回查询信息
        MsgString = sTokens(0) & "query successful"     '虽然MsgString不是返回值,但传递方式是ByRef,实参地址和这个地址相同
    Else
        '创建数据集对象
       Set rst = New ADODB.Recordset
        '返回查询结果
       rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
      
       '返回记录集对象
       Set ExecuteSQL = rst
       MsgString = "查询到" & rst.RecordCount & _
                 "条记录"
    End If
    
ExecuteSQL_Exit:
    Set rst = Nothing       '清空记录集对象
    Set cnn = Nothing       '断开连接
    Exit Function
    
ExecuteSQL_Error:
    MsgString = "查询错误" & _
                Err.Description
    Resume ExecuteSQL_Exit     '遇到错误后退出
End Function


       在学生信息管理系统中,来执行insert,delete.update语句的是利用的Connection对象的Execute方法,而执行select语句的时候,用的是Recordset方法的Open方法,但是,实际我们在后来的调用中,用到的只是Recordset对象来执行Select语句,也就是只是用到上面代码的Else下面的部分,而那些删除,插入,更新,都用的是Recordset.Update一句搞定,根本没有自己写过这些语句。

      前一阵子开会,听了师父的要求,于是,放弃了复制粘贴原来的模块,而是自己写了一个核心模块。

 

Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
    
    Dim cnn As ADODB.Connection     '定义ADO的连接对象
    Dim rst As ADODB.Recordset    '定义ADO 的记录集对象
    Dim cmd As ADODB.Command       '定义ADO的command对象,用此对象来执行SQL语句
    
    On Error GoTo ExecuteSQL_Error     '错误处理,出现错误后,跳转到错误处理过程
    
    
    '用Connection对象连接数据库
    Set cnn = New ADODB.Connection   '实例化Connection对象
    cnn.ConnectionString = ConnectionString     '将连接子符串赋给连接对象
    cnn.Open   '打开连接对象
    
    
    '用command对象执行对数据库的操作
    Set cmd = New ADODB.Command         '实例化command对象
    Set cmd.ActiveConnection = cnn  '指定cmd对象当前所属的connection对象
    
       
    cmd.CommandText = Trim(SQL)    '设置SQL语句
    'cmd.CommandType = adCmdText   ’设置或返回一个 Command 对象的类型

    
        
    
    '将查询的结果保存在recordset对象中
    Set rst = New ADODB.Recordset
    rst.CursorType = adOpenKeyset   '设置游标类型
    rst.LockType = adLockOptimistic '设置锁定类型
    Set rst = cmd.Execute()     '执行查询,并将查询的结果保存在recordset对象中
    Set ExecuteSQL = rst        '返回函数的结果
    
    
ExecuteSQL_Error:
    MsgString = Err.Description  '经错误信息报存在msgstring字符串中
    
    'If Testtxt(MsgString) = True Then  '如果产生错误信息,直接退出
        'If (MsgBox(MsgString, vbOKOnly, "提示")) = vbOKOnly Then   '显示错误提示
             'GoTo ExecuteSQL_Exit     '遇到错误后退出
       ' End If
    'End If
    
    
   
ExecuteSQL_Exit:    '退出执行SQL语句,释放清空对象
   
    Set rst = Nothing       '清空记录集对象
    Set cmd = Nothing       '释放command对象
    Set cnn = Nothing       '断开连接
    'cnn.Close
    'rst.Close
    Exit Function
    
 
    
    
End Function


     这个函数主要是利用Connection对象连接数据库,然后利用Command对象来执行SQL语句,并将查询的结果保存在Recordset对象中。这个函数有两个参数,一个是SQL字符串,用来传递给Command对象执行对数据库的操作,另一个字符串表示用来显示程序运行的错误,调试时使用的。

   模块刚刚做好,只刚在登录窗口中使用过了,但是不知道是不是可以应用于所有的SQL操作,目前还在试验中。

   请多多指教。  

            

 
目录
相关文章
|
SQL XML Oracle
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
370 0
Mybatis动态SQL语句查询,实现一个参数 可查询多个字段。
|
SQL Java 数据库连接
springboot-maven项目+jpa 运行过程中执行resources下sql脚本文件-ClassPathResource和ScriptUtils.executeSqlScript的使用
springboot-maven项目+jpa 运行过程中执行resources下sql脚本文件-ClassPathResource和ScriptUtils.executeSqlScript的使用
485 0
springboot-maven项目+jpa 运行过程中执行resources下sql脚本文件-ClassPathResource和ScriptUtils.executeSqlScript的使用
|
SQL 存储 缓存
一文搞懂MySQL中一条SQL语句是如何执行的
一文搞懂MySQL中一条SQL语句是如何执行的
|
9月前
|
SQL 数据采集 数据可视化
数据开发模块中的SQL和数据分析模块中的SQL查询
数据开发模块中的SQL和数据分析模块中的SQL查询
151 1
|
SQL JSON 供应链
【墨菲安全实验室】Apache IoTDB grafana-connector模块SQL注入分析
【墨菲安全实验室】Apache IoTDB grafana-connector模块SQL注入分析
【墨菲安全实验室】Apache IoTDB grafana-connector模块SQL注入分析
|
SQL 程序员 开发工具
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
430 0
【Sql Server】基础之分组查询重复出现多条记录的SQL语句,以及group by和having、min函数运用
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
SQL 查询表中每门课程成绩最好的前n名学生 优于group by语句的方法
|
SQL 关系型数据库 MySQL
SQL语句优化方法
SQL语句优化方法
136 0
|
SQL 数据库 数据安全/隐私保护
使用SQL语句 查询电话号码 加密显示
使用SQL语句 查询电话号码 加密显示
180 0
使用SQL语句 查询电话号码 加密显示