VB.NET中如何通过ConnectionObject.Execute()获取受影响记录数
原因说明
ADODB.Connection的Execute()方法不会自动向外抛出操作影响的记录行数,需要显式传入变量接收方法的输出参数才能拿到对应数值。
修复方案
- 声明Long类型变量,作为
Execute()方法的第二个参数传入,语句执行完成后该变量会被自动赋值为本次操作影响的记录总数。 - 执行增删改这类不需要返回结果集的操作时,建议传入
adExecuteNoRecords常量,跳过Recordset对象生成逻辑,减少不必要的性能开销。
修正后可直接运行的代码
Dim db As ADODB.Connection Dim affectedRows As Long Dim deleteExams As String ' 若工程未提前引用Microsoft ActiveX Data Objects库,直接定义常量即可 Const adExecuteNoRecords As Long = 128 Set db = OpenDatabase(ConnectionString) deleteExams = "delete from [Table2] where [PlanDate] < '" & sDate & "'" ' 传入行数接收变量与执行选项 db.Execute deleteExams, affectedRows, adExecuteNoRecords ' 此时affectedRows就是删除操作影响的实际行数,可直接用于业务判断、日志打印 MsgBox "操作完成,共删除符合条件的记录" & affectedRows & "条" db.Close() Set db = Nothing
注意:直接拼接SQL字符串存在SQL注入隐患,若sDate格式与数据库存储的日期格式不匹配也可能触发语句执行错误,正式环境建议改用
ADODB.Command对象通过参数化方式传值执行操作。
内容的提问来源于stack exchange,提问作者Karthik Karnam
相关产品推荐
相关产品推荐

