利用oledb读写excel出现“操作必须利用一个可更新的查询”的处理
利用oledb读写excel出现“操作必须利用一个可更新的查询”的处理
前两天利用oledb衔接excel的办法为单位某部门从一个excel的多个sheet中作连选抽出需求的数据,程序十分简略,后果很快就进去,原来手工需求很长工夫能力选出的后果如今几乎一点击就有了却果。利用人员十分称心,因为是多人利用,末尾只是将后果显示在一个页面上。起初他们要求将后果写入该xls文件的另一个sheet中,我随意写了个语句认为可能立马搞掂,没想到居然出现了“操作必须利用一个可更新的查询”。由于读取后果失常,我末尾认为是excel文件所处的文件夹没有写权限所致。添加了相应权限后,后果荡然无存。没办法还是反省程序吧,细心反省了一下,成绩发现了,原来末尾只是为了读取excel我将衔接写成了如下格式:
Private filename As String=Server.MapPath(".")+"test.xls;Extended Properties='Excel8.0;HDR=yes;IMEX=1'"
Dim constr As String="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename
顺便留意
Extended Properties='Excel8.0;HDR=yes;IMEX=1'
A:HDR(HeaDer Row)设置
若指定值为Yes,代表Excel档中的工作表第一行是栏位称号
若指定值為No,代表Excel档中的工作表第一行就是資料了,沒有栏位称号
B:IMEX(IMport EXport mode)设置
IMEX有三种形式,各自惹起的读写行为也不同,容後再述:
0is Export mode
1is Import mode
2is Linked mode(full update capabilities)
我这里顺便要阐明的就是IMEX参数了,由于不同的形式代表著不同的读写行为:
当IMEX=0时为“汇出形式”,这个形式开启的Excel档案只能用来做“写入”用途。
当IMEX=1时为“汇入形式”,这个形式开启的Excel档案只能用来做“读取”用途。
当IMEX=2时为“连結形式”,这个形式开启的Excel档案可同时援助“读取”与“写入”用途。
看完这些大家就不用再说我的写如为什么有成绩了吧。我将衔接改为如下:
Private filename As String=Server.MapPath(".")+"test.xls;Extended Properties='Excel8.0;HDR=yes;IMEX=2'"
Dim constr As String="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+filename
运转所有ok。