SQL Server 導入導出向導導出到有密碼的 Access (.mdb/.accdb) 時,測試連接失敗:
因為初始化提供程序時發生錯誤,無法啟動應用程序。工作組信息文件丟失,或是已被其它用戶以獨占方式打開。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\db.accdb;Jet OLEDB:Database Password=YourPassword;
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\db.mdb;Jet OLEDB:Database Password=YourPassword;
| 問題 | 原因 | 解決 |
|---|---|---|
| 工作組信息文件丟失 | 舊版 .mdb 用戶級安全 (mdw 文件) | 遷移到 .accdb 或指定 Workgroup Information File |
| 獨占打開 | Access 正在打開該文件 | 關閉 Access 所有實例 |
| 提供程序未註冊 | 未安裝 ACE/Jet 驅動 | 安裝 Microsoft Access Database Engine (AccessDatabaseEngine.exe) |
| 32/64 位不匹配 | SQL Server 64位,驅動 32位 | 安裝 64 位 ACE 驅動,或用 32 位導出向導 |
using (OleDbConnection conn = new OleDbConnection(
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=target.accdb;Jet OLEDB:Database Password=pwd;")) {
conn.Open();
// 批量插入
using (OleDbCommand cmd = conn.CreateCommand()) {
cmd.CommandText = "INSERT INTO Table1 (Col1, Col2) VALUES (?, ?)";
// 參數化批量執行
}
}
首選臨時移除密碼導出再加密最省事;必須保持加密時,確保安裝64位 ACE 驅動,連接字符串包含 `Jet OLEDB:Database Password=xxx`,關閉 Access 獨占鎖定。