技术要点
流程
- 使用
OleDbConnection
对象连接数据库。 - 使用
OleDbCommand
对象执行修改数据库密码的操作。
技术要点
- 注意使用
OleDbConnection
对象时,需要使用独占方式打开,使用此种方式打开,才能够修改数据库的密码,方式为在连接字符串中设置参数Mode=Share Exclusive;
- 如果要更改密码的数据库已经设置了密码,则需要在连接字符串中使用
Jet OLEDB:Database Password='原密码';
的方式来指定原来的密码,不然在OleDbConnection
对象连接时会提示密码无效。
连接字符串示例
$"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
。
更改密码语句示例
$"ALTER DATABASE PASSWORD [{pwd}] NULL;"
$"ALTER DATABASE PASSWORD NULL [{nowPwd}];"
$"ALTER DATABASE PASSWORD [{newPwd}] [{nowPwd}];"
程序示例
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;}