首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 使用 OleDb 連接 Excel 執行 Insert Into 遇到「操作必須使用一個可更新的查詢」問題排查

     編輯:關於C#

環境與錯誤

  • Windows 7、.NET Framework 4.0、Office 2007、VS2010、C# WinForm
  • 執行 Insert Into [Sheet1$] Values(...) 拋出:「操作必須使用一個可更新的查詢」

嘗試過的方向

  1. 權限問題:以管理員身分執行、程式碼授予 Everyone/Users 完整控制權限 → 無效。
  2. 連接字串 Extended Properties='Excel 12.0; HDR=yes; IMEX=2':
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" +
  "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=2'";

IMEX 參數三種模式

值模式說明
0Export mode唯寫
1Import mode唯讀
2Linked mode可讀寫(完全更新能力)

按理 IMEX=2 應支援讀寫,但實測仍失敗。

意外發現:IMEX=0 可行

嘗試 IMEX=0 → 成功!再測 IMEX=4、10 也成功,唯獨 1、2 失敗。推測為 ACE OLEDB 提供者在特定版本下的 Bug 或行為差異。

結論

若遇到此錯誤且確認權限無誤,嘗試將 IMEX 設為 0、4 或 10 等非標準值可能繞過問題。本文環境為 WinForm,非 Web 應用(Web 需額外設定 IIS_IUSRS 權限)。

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