【VB6|第21期】检查SqlServer数据库置疑损坏的小工具(含源码)

日期:2023年7月25日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


在这里插入图片描述


文章目录

  • 一、前言
  • 二、使用说明
    • (2-1)数据库连接测试
    • (2-2)数据库完整性检测
  • 三、实现思路
    • (3-1)数据库连接测试
    • (3-2)数据库完整性检测
  • 四、完整源码


一、前言

在这里插入图片描述
当用户电脑、或者我们所要操作的电脑没有 SQL Server Management Studio ,而我们又想确定 SqlServer某个数据库是否损坏的时候,这个时候就有点难办了,只能硬着头皮先安装这种大块头的工具,然后再写 DBCC CHECKDB 的语句检测问题,时间基本都花到了安装软件上了。

为了解决这个问题,不妨自己做一个小工具,如下所示:

在这里插入图片描述

二、使用说明

(2-1)数据库连接测试

输入服务器名称用户名登录名以及数据库密码,点击【数据库连接测试】按钮,可以测试参数是否正确;在这里插入图片描述

(2-2)数据库完整性检测

填写需要检测的数据库名称 ,点击【开始检测】按钮

  • 正确:在这里插入图片描述

  • 数据库置疑的错误:
    在这里插入图片描述

  • 数据库不存在的错误:
    在这里插入图片描述

三、实现思路

实现思路很简单,先实现正常连接数据库功能,再实现数据库检测的功能,如下:

(3-1)数据库连接测试

可以通过 CN.OpenCN.State (其中 Dim CN As New ADODB.Connection)来判断是否可以正常连接上数据库;

Private Sub CmdPing_Click()
On Error Resume Next
    
    Dim sErr As String: sErr = ""
    Dim CN As New ADODB.Connection
    
    CN.ConnectionString = getConnectionString()
    
    CN.Open

    If CN.State = adStateOpen Then
        MsgBox "连接成功!"
        CN.Close
    Else
        MsgBox "连接失败:" & err.Description
    End If

    Set CN = Nothing
End Sub

其中,获取数据库连接字符串的函数如下所示:

Private Function getConnectionString(Optional ByVal isWinLogin As Boolean = False, Optional ByVal sDbName As String = "master") As String
On Error Resume Next
'函数说明:获取数据库连接字符串
'创建作者:Commas
'创建时间:2023-07-25
'修改时间:
'------传参说明------
'isWinLogin:是否采用 “Windows 身份验证”,默认采用 “SQL Server 身份验证”;
'sDbName:指定需要连接的数据库,默认为master
'------传参说明------
    Dim sCNStr As String
    If isWinLogin Then
        sCNStr = "Provider=SQLOLEDB;Data Source={ServerName};Initial Catalog={DatabaseName};Trusted_Connection=Yes;Persist Security Info=True;"
        If Trim(Me.TxtDB(0).Text) = "127.0.0.1" Then
            sCNStr = Replace(sCNStr, "{ServerName}", ".")
        Else
            sCNStr = Replace(sCNStr, "{ServerName}", Trim(Me.TxtDB(0).Text))
        End If
        sCNStr = Replace(sCNStr, "{DatabaseName}", "master")
    Else
        sCNStr = "Provider=SQLOLEDB;Data Source={ServerName};Initial Catalog={DatabaseName};User Id={Username};Password={Password};"
        '也可以先不指定 Initial Catalog={DatabaseName};
        'sCNStr = "Provider=SQLOLEDB;Data Source={ServerName};User Id={Username};Password={Password};"
        
        sCNStr = Replace(sCNStr, "{ServerName}", Trim(Me.TxtDB(0).Text))
        sCNStr = Replace(sCNStr, "{DatabaseName}", "master")
        sCNStr = Replace(sCNStr, "{Username}", Trim(Me.TxtDB(1).Text))
        sCNStr = Replace(sCNStr, "{Password}", Trim(Me.TxtDB(2).Text))
    End If
    getConnectionString = sCNStr
End Function

(3-2)数据库完整性检测

首先,我们用 SQL 先进行数据库数据库检查,如下:

DBCC CHECKDB ('<DataBaseName>') WITH NO_INFOMSGS;

其中,<DataBaseName> 改为需要检测的数据库名称

接着,我们借用 CN.Errors (其中 Dim CN As New ADODB.Connection)来捕获精确的错误信息。当执行数据库查询或操作时,ADO 对象会自动将错误信息添加到 Errors 集合中,我们可以通过检查该集合来获取更详细的错误信息,包括错误号、错误描述和可能的原因等。

CN.Execute "DBCC CHECKDB ('" & sDbName & "') WITH NO_INFOMSGS;"
If CN.Errors.Count > 0 Then
    ' 捕获错误并进行相应的处理
    Dim errMsg As ADODB.Error
    For Each errMsg In CN.Errors
        'MsgBox "错误号:" & errMsg.Number & vbCrLf & "错误描述:" & errMsg.Description, vbExclamation
        If InStr(errMsg.Description, "表错误") > 0 Then
            If sErr <> "" Then sErr = sErr & Chr(10)
            sErr = sErr & errMsg.Description
        End If
    Next errMsg
    
    Err.Clear
End If

四、完整源码

Option Explicit

Private Function getConnectionString(Optional ByVal isWinLogin As Boolean = False, Optional ByVal sDbName As String = "master") As String
On Error Resume Next
'函数说明:获取数据库连接字符串
'创建作者:Commas
'创建时间:2023-07-26
'修改时间:
'------传参说明------
'isWinLogin:是否采用 “Windows 身份验证”,默认采用 “SQL Server 身份验证”;
'sDbName:指定需要连接的数据库,默认为master
'------传参说明------
    Dim sCNStr As String
    If isWinLogin Then
        sCNStr = "Provider=SQLOLEDB;Data Source={ServerName};Initial Catalog={DatabaseName};Trusted_Connection=Yes;Persist Security Info=True;"
        If Trim(Me.TxtDB(0).Text) = "127.0.0.1" Then
            sCNStr = Replace(sCNStr, "{ServerName}", ".")
        Else
            sCNStr = Replace(sCNStr, "{ServerName}", Trim(Me.TxtDB(0).Text))
        End If
        sCNStr = Replace(sCNStr, "{DatabaseName}", "master")
    Else
        sCNStr = "Provider=SQLOLEDB;Data Source={ServerName};Initial Catalog={DatabaseName};User Id={Username};Password={Password};"
        '也可以先不指定 Initial Catalog={DatabaseName};
        'sCNStr = "Provider=SQLOLEDB;Data Source={ServerName};User Id={Username};Password={Password};"
        
        sCNStr = Replace(sCNStr, "{ServerName}", Trim(Me.TxtDB(0).Text))
        sCNStr = Replace(sCNStr, "{DatabaseName}", "master")
        sCNStr = Replace(sCNStr, "{Username}", Trim(Me.TxtDB(1).Text))
        sCNStr = Replace(sCNStr, "{Password}", Trim(Me.TxtDB(2).Text))
    End If
    getConnectionString = sCNStr
End Function

Private Sub CmdPing_Click()
On Error Resume Next
    
    Dim sErr As String: sErr = ""
    Dim CN As New ADODB.Connection
    
    CN.ConnectionString = getConnectionString()
    
    CN.Open

    If CN.State = adStateOpen Then
        MsgBox "连接成功!"
        CN.Close
    Else
        MsgBox "连接失败:" & Err.Description
    End If

    Set CN = Nothing
End Sub

Private Sub CheckDatabaseIntegrity(ByVal sDbName As String)
On Error Resume Next
'函数说明:获取数据库连接字符串
'创建作者:Commas
'创建时间:2023-07-25
'修改时间:
'------传参说明------
'sDbName:指定需要连接的数据库,默认为master
'------传参说明------
    Dim sErr As String: sErr = ""
    Dim CN As New ADODB.Connection
    
    ' 设置数据库连接字符串
    CN.ConnectionString = getConnectionString()
    
    ' 打开数据库连接
    CN.Open
    
    ' 设置要执行的 SQL 查询
    CN.Execute "DBCC CHECKDB ('" & sDbName & "') WITH NO_INFOMSGS;"
    If CN.Errors.Count > 0 Then
        ' 捕获错误并进行相应的处理
        Dim errMsg As ADODB.Error
        For Each errMsg In CN.Errors
            'MsgBox "错误号:" & errMsg.Number & vbCrLf & "错误描述:" & errMsg.Description, vbExclamation
            If InStr(errMsg.Description, "表错误") > 0 Then
                If sErr <> "" Then sErr = sErr & Chr(10)
                sErr = sErr & errMsg.Description
            End If
        Next errMsg
        
        Err.Clear
    End If
    
    ' 关闭数据库连接
    CN.Close

    If sErr <> "" Then
        MsgBox "【" & "SuperMarket" & "】检测异常,详情如下:”" & Chr(10) & sErr
    Else
        MsgBox "【" & sDbName & "】检测正常"
    End If
End Sub
        
Private Sub CmdRun_Click()
On Error Resume Next
    Call CheckDatabaseIntegrity(Me.TxtDB(3).Text)
End Sub


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/131915284

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/47205.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《MySQL45讲》笔记—事务隔离

事务 事务就是保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 原子性 一个事务中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成&#xff0c;不会结束在中间某个环节&#xff0c;而且事务在执行过程中发生错误&#xff0c;会被回滚…

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRGRU门控循环单元分位数回归分位数回归多输入单输出区间…

Docker 容器高级操作

Docker容器高级操作 Docker容器创建、停止、启动、删除等基础操作上篇已述,然Docker容器被广大开发者青睐,不可能只有如此简单的功能,必有高阶功法。那么接下来 让我们一同走进容器操作的高级篇,领略其高级操作的魅力。 查看容器 docker ps -a | grep tomcat [root@tudou…

qt6.5 download for kali/ubuntu ,windows (以及配置选项选择)

download and sign in qt官网 sign in onlion Install 1 2 3 4 5

Redis服务优化

目录 一.Rde高可用 二.Rdies持久化 2.1持久化的功能 2.2Redis 提供两种方式进行持久化 三.RDB持久化 3.1触发条件 3.1.1手动触发 3.1.2自动触发 3.1.3其他自动触发机制 3.1.4执行流程 3.1.5启动时加载 四.AOF持久化 4.1开启AOF 4.2执行流程 4.2.1命令追加(append) 4.2.2文件写…

【论文阅读22】Label prompt for multi-label text classification

论文相关 论文标题&#xff1a;Label prompt for multi-label text classification&#xff08;基于提示学习的多标签文本分类&#xff09; 发表时间&#xff1a;2023 领域&#xff1a;多标签文本分类 发表期刊&#xff1a;Applied Intelligence&#xff08;SCI二区&#xff0…

FPGA设计时序分析二、建立/恢复时间

目录 一、背景知识 1.1 理想时序模型 1.2 实际时序模型 1.2.1 时钟不确定性 1.2.2 触发器特性 二、时序分析 2.1 时序模型图 ​2.2 时序定性分析 一、背景知识 之前的章节提到&#xff0c;时钟对于FPGA的重要性不亚于心脏对于人的重要性&#xff0c;所有的逻辑运算都离开…

Python 进阶(一):PyCharm 下载、安装和使用

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、下载 PyCharm二、安装 PyCharm三、创建项目四、界面汉化五、实用技巧5.1、使用快捷…

EtherNet/IP转 Modbus网关实现AB PLC控制变频器案例

捷米特JM-EIP-RTU网关 Modbus转ETHERNET/IP用于将多个变频器连接到Ethernet/Ip主网&#xff0c;以便森兰变频器可以由AB PLC控制。 配备专用于JM-EIP-RTU网关的EDS文件&#xff0c;AB PLC主站可以控制森兰逆变器从站。 使用 AB 系统的配置方法 1&#xff0c; 运行 RSLogix 500…

OpenGl中的VAO、VBO与EBO

文章目录 VBO(顶点缓冲区对象)VBO的使用 EBO(索引缓冲对象)EBO的使用 VAO(顶点数组对象)VAO的使用 三者的区别someting。。。 哎&#xff0c;很离谱&#xff0c;上个月学learnopengl学到一半跑去看庄懂老师的视频&#xff0c;结果该还的东西迟早得还&#xff0c;再打开之前的工…

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目&#xff0c;提供了一个微信小程序组件&#xff08;Component&#xff09;&#xff0c;我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…

蓝桥杯专题-真题版含答案-【贪吃蛇长度】【油漆面积】【绘制圆】【高次方数的尾数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Ansible 自动化运维

目录 ansible 环境安装部署ansible 命令行模块inventory 主机清单 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可…

Wireshark抓包分析教程(ubuntu版本)

安装 first&#xff0c;多亏我们的C知道&#xff0c;成功安装了wireshark&#xff0c; Steps are as following&#xff1a; 添加wireshark的软件源(PPA:personal package archive(档案)) sudo apt-add-repository ppa:wireshark-dev/stable ppa:wireshark-dev/stable 是一个…

PHP数组转对象和对象转数组

PHP数组转对象和对象转数组 <?php function array_to_object($arr){$obj new stdClass();foreach ($arr as $key > $val) {if (is_array($val) || is_object($val)) {$obj->$key array_to_object($val);} else {$obj->$key $val;}}return $obj; } function o…

Kyuubi入门简介

一、官方简介 HOME — Apache Kyuubi 二、概述 1、一个企业级数据湖探索平台 2、一个高性能的通用JDBC和SQL执行引擎 3、一个基于spark的查询引擎服务 三、优点 1、提供hiveserver2查询spark sql的能力&#xff0c;查询效率更为高效&#xff0c;首次构建连接时会持续保持连…

洛必达法则和分部积分的应用之计算数学期望EX--概率论浙大版填坑记

如下图所示&#xff0c;概率论与数理统计浙大第四版有如下例题&#xff1a; 简单说就是&#xff1a;已知两个相互独立工作电子装置寿命的概率密度函数&#xff0c;将二者串联成整机&#xff0c;求整机寿命的数学期望。 这个题目解答中的微积分部分可谓是相当的坑爹&#xff0c;…

DDL\DML

查询字段 1、查询指定字段 select 字段1, 字段2 ,...] from 表名; select ename, sal from emp; select ename from emp; 2、查询全部字段 select * from 表名; select * from emp; 条件查询 使用 where 语句&#xff0c;放在 from 后 select * from emp where 条件…

PostgreSQL 的事务管理和并发控制机制解析

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Prompt Engineering论文梳理(主要为2022年)

AutoPrompt &#xff08;EMNLP2020&#xff09; Shin T, Razeghi Y, Logan IV R L, et al. Autoprompt: Eliciting knowledge from language models with automatically generated prompts[J]. arXiv preprint arXiv:2010.15980, 2020. 基本架构&#xff0c;original input t…