技术要点
流程
- 使用
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;
}