使用oledb讀寫excel出現(xiàn)“操作必須使用一個可更新的查詢”的解決辦法
使用oledb讀寫excel出現(xiàn)“操作必須使用一個可更新的查詢”的解決辦法
轉(zhuǎn)自:http://www.rzrgm.cn/Richinger/archive/2008/09/28/1301170.html
前兩天使用oledb連接excel的辦法為單位某部門從一個excel的多個sheet中作連選抽出需要的數(shù)據(jù),程序非常簡單,結果很快就出來,原來手工需要很長時間才能選出的結果現(xiàn)在幾乎一點擊就有了結果。使用人員非常滿意,由于是多人使用,開始只是將結果顯示在一個頁面上。后來他們要求將結果寫入該xls文件的另一個sheet中,我隨便寫了個語句以為可以立馬搞掂,沒想到居然出現(xiàn)了“操作必須使用一個可更新的查詢”。因為讀取結果正常,我開始以為是excel文件所處的文件夾沒有寫權限所致。增加了相應權限后,結果依然如故。沒辦法還是檢查程序吧,仔細檢查了一下,問題發(fā)現(xiàn)了,原來開始只是為了讀取excel我將連接寫成了如下格式:
Private filename As String = Server.MapPath(".") + "\test.xls;Extended Properties='Excel 8.0;HDR=yes;IMEX=1'"
Dim constr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename
特別注意
Extended Properties='Excel 8.0;HDR=yes;IMEX=1'
A: HDR ( HeaDer Row )設置
若指定值為Yes,代表 Excel 檔中的工作表第一行是欄位名稱
若指定值為 No,代表 Excel 檔中的工作表第一行就是資料了,沒有欄位名稱
B:IMEX ( IMport EXport mode )設置
IMEX 有三種模式,各自引起的讀寫行為也不同,容後再述:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
我這里特別要說明的就是 IMEX 參數(shù)了,因為不同的模式代表著不同的讀寫行為:
當 IMEX=0 時為“匯出模式”,這個模式開啟的 Excel 檔案只能用來做“寫入”用途。
當 IMEX=1 時為“匯入模式”,這個模式開啟的 Excel 檔案只能用來做“讀取”用途。
當 IMEX=2 時為“連結模式”,這個模式開啟的 Excel 檔案可同時支援“讀取”與“寫入”用途。
看完這些大家就不用再說我的寫入為什么有問題了吧。我將連接改為如下:
Private filename As String = Server.MapPath(".") + "\test.xls;Extended Properties='Excel 8.0;HDR=yes;IMEX=2'"
Dim constr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename
運行一切ok。

浙公網(wǎng)安備 33010602011771號