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;
        }
相关推荐
wangchunyu11414 分钟前
PostgreSQL 入门与实践:从零搭建一个 CRUD 应用
数据库·postgresql
涛思数据(TDengine)15 分钟前
从_找根因_到_搭系统_:工业 AI 实战直播(十、十一期)
大数据·数据库·人工智能·时序数据库·tdengine
qq_339191141 小时前
mysql磁盘占用排查,mysql存储空间占比统计,mysql判断哪张表占用磁盘空间大
数据库·mysql
东方护航数据恢复(深圳)1 小时前
SSD主控损坏后的芯片级提取:FTL映射表重建与NAND直读
大数据·数据库
光锥智能2 小时前
OceanBase领跑数字政府数据库选型:产品能力、市场潜力、技术潜力均居首
数据库·人工智能·oceanbase
风哥2号2 小时前
达梦DM数据库恢复工具FGDDU(FGEDU DM DUL)
数据库·达梦数据库·数据库恢复
2601_960017623 小时前
啤酒行业PLM突围战:一半科技以配方与工艺数字化重构酿造食品研发体系
数据库·科技·重构
GIS数据转换器3 小时前
智慧林草“一张图“平台
java·大数据·服务器·前端·javascript·数据库·人工智能
gis开发之家3 小时前
Spring Boot 4 深度解析,JdbcTemplate 实战——轻量级数据库操作方案
java·数据库·spring boot·后端