首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 導出數據到加密 Access 數據庫的兩種方案

     編輯:程式設計綜合問答

問題現象

SQL Server 導入導出向導導出到有密碼的 Access (.mdb/.accdb) 時,測試連接失敗:

因為初始化提供程序時發生錯誤,無法啟動應用程序。工作組信息文件丟失,或是已被其它用戶以獨占方式打開。

方案一:移除密碼後導出(最簡單)

  1. 用 Access 打開目標文件,輸入密碼
  2. 2. 文件 → 信息 → 加密密碼 → 「移除密碼」 3. 另存為無密碼版本 4. 導入導出向導連接無密碼文件 5. 導出完成後,Access 中重新設置密碼

方案二:正確的連接字符串(不移除密碼)

Access 2007+ (.accdb) - ACE Provider

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\db.accdb;Jet OLEDB:Database Password=YourPassword;

Access 2003 (.mdb) - Jet Provider

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\path\db.mdb;Jet OLEDB:Database Password=YourPassword;

SQL Server 導入導出向導設置

  1. 數據源選擇 ".NET Framework Data Provider for OLE DB"
  2. 2. 屬性 → "All" 標籤 → 設置 `Extended Properties` 或直接在連接字符串中包含密碼參數 3. 或選擇 "Microsoft OLE DB Provider for Jet/ACE",在「所有」頁面設置 `Jet OLEDB:Database Password`

常見坑點

問題原因解決
工作組信息文件丟失舊版 .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 位導出向導

程序化導出(C# 示例)

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 (?, ?)";
        // 參數化批量執行
    }
}

替代方案

  • 中間導出 CSV/Excel,再 Access 導入
  • Linked Server 查詢 Access(需正確驅動)
  • SSIS 包處理複雜 ETL

總結

首選臨時移除密碼導出再加密最省事;必須保持加密時,確保安裝64位 ACE 驅動,連接字符串包含 `Jet OLEDB:Database Password=xxx`,關閉 Access 獨占鎖定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved