c#使用OleDb库更改Access数据库的密码

技术要点

流程

  1. 使用OleDbConnection对象连接数据库。
  2. 使用OleDbCommand对象执行修改数据库密码的操作。

技术要点

  • 注意使用OleDbConnection对象时,需要使用独占方式 打开,使用此种方式打开,才能够修改数据库的密码,方式为在连接字符串中设置参数Mode=Share Exclusive;
  • 如果要更改密码的数据库已经设置了密码,则需要在连接字符串中使用Jet OLEDB:Database Password='原密码';的方式来指定原来的密码,不然在OleDbConnection对象连接时会提示密码无效。
连接字符串示例
csharp 复制代码
$"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={db};Mode=Share Exclusive;Jet OLEDB:Database Password='{nowPassword}'";
  • 要执行的数据库语句为$"ALTER DATABASE PASSWORD [{newPwd}] [{nowPwd}];"
    需要注意:
    此语句中新密码参数在前面,旧密码参数在后面 。在调试程序时,根据GPT说的先写旧密码后写新密码,整了好长时间,最后才发现是需要将新密码写在前面的。
    如果旧密码为空值 ,在语句中使用NULL代替。如果需要解密数据库,则将新密码设置为NULL
更改密码语句示例
csharp 复制代码
$"ALTER DATABASE PASSWORD [{pwd}] NULL;" //将未加密的数据库使用密钥 pwd 进行加密
$"ALTER DATABASE PASSWORD NULL [{nowPwd}];" //将加密的数据库使用密钥 nowPwd 进行解密,得到的数据库是无密码的数据库
$"ALTER DATABASE PASSWORD [{newPwd}] [{nowPwd}];" //将使用 nowPwd 密码加密的数据库改为使用 newPwd 密码加密

程序示例

csharp 复制代码
        /// <summary>
        /// 使用密码加密数据库
        /// </summary>
        /// <param name="db"></param>
        /// <param name="pwd"></param>
        /// <returns></returns>
        private bool ecrDb(string db, string pwd)
        {
            try
            {
                using (OleDbConnection odc = new OleDbConnection())
                {
                    odc.ConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={db};Mode=Share Exclusive;";
                    odc.Open();
                    
                    using (OleDbCommand cmd = new($"ALTER DATABASE PASSWORD [{pwd}] NULL;", odc))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }

            return true;
        }
相关推荐
rockey62733 分钟前
AScript函数体系详解
c#·.net·script·eval·expression·function·动态脚本
2501_9142459339 分钟前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
maqr_1102 小时前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
u0109147602 小时前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_381288182 小时前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
Deitymoon2 小时前
嵌入式数据库——SQLite基础
数据库·sqlite
YMatrix 官方技术社区2 小时前
美国·硅谷|YMatrix 即将亮相 Postgres Conference 2026,前瞻 AI 时代的数据基座
数据库·数据仓库·postgresql·时序数据库·ymatrix
bKYP953cL2 小时前
构建自己的AI编程助手:基于RAG的上下文感知实现方案
数据库·人工智能·ai编程
Bert.Cai2 小时前
MySQL DML简介
数据库·mysql
maqr_1103 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python