由于我无法控制的原因,我必须处理一个新的 Access MDB 文件,该文件每月由我编写的自动化过程下载、解密和解压缩。尽管有 PGP 加密,发件人(保险公司)仍拒绝发送不受密码保护的 MDB。
不幸的是,文件下载后立即进行处理,并假定没有密码,因此这些文件不会被处理,因为 OleDbException 显示我们的密码错误。我们知道密码,并且我们知道连接字符串的“使用数据库密码”选项:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:Database Password=MyDbPassword;
这只能解决部分问题,因为其他部门稍后需要访问这些文件,而他们不知道密码。到目前为止,我只能通过在打开文件时按住 Shift 键,在密码提示时取消,通过打开的 Access 进程再次打开文件,同时再次按住 Shift 并单击“以独占方式打开”来使其工作,然后继续在浏览密码对话框时按住 Shift 键,然后通过安全工具取消设置密码。
我想做的只是使用 C# 在下载 MDB 文件后立即以编程方式取消设置 MDB 文件上的数据库密码。有没有办法做到这一点,或者每次我们获得新文件时我都必须亲自干预,完全违背了自动化的目的?
以编程方式更改密码的方式详解here.
本质上,需要执行以下操作:
- 使用 ADO.NET 打开与数据库的连接
-
在数据库上执行 alter 语句,将其密码设置为 NULL,如下所示:
更改数据库密码 [您的密码] NULL;
处置连接
示例代码取自源码:
Private Function CreateDBPassword(ByVal Password As String, _
ByVal Path As String) As Boolean
Dim objConn as ADODB.Connection
Dim strAlterPassword as String
On Error GoTo CreateDBPassword_Err
' Create the SQL string to initialize a database password.
strAlterPassword = "ALTER DATABASE PASSWORD [Your Password] NULL;"
' Open the unsecured database.
Set objConn = New ADODB.Connection
With objConn
.Mode = adModeShareExclusive
.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _
"Source=[Your Path];"
' Execute the SQL statement to secure the database.
.Execute (strAlterPassword)
End With
' Clean up objects.
objConn.Close
Set objConn = Nothing
' Return true if successful.
CreateDBPassword = True
CreateDBPassword_Err:
Msgbox Err.Number & ":" & Err.Description
CreateDBPassword = False
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)