VC6.0中用ADO操作Excel的连接字符串:
"DSN
=
Excel Files;DBQ
=
FilePath
+
FileName;DefaultDir
=
FilePath;Driver ID
=
790
;MaxBuffersize
=
2048
;pagetimeout
=
5
;"
例如:
DSN
=
Excel Files;DBQ
=
D://T_20071122.xls;DefaultDir
=
D://;DriverId
=
790
;MaxBufferSize
=
2048
;PageTimeout
=
5
;
建立一个这样的连接对象,就可以把Excel当作一个数据库进行操作,其中每一个Worksheet相当于数据库中一张表,在操作这些Sheet时,需要用[]将sheet名+$包含起来,比如:select * from [totalprice$]
在.NET中操作Excel很方便,ADO.NET把大部分繁杂的工作都替我们做了,
C#.NET中用ADO.NET操作Excel连接字符串:
Provider
=
Microsoft.Jet.OLEDB.
4.0
;data source
=
"
+ dataFilePath +
"
;Extended Properties
=
Excel
8.0
;
实际上,上面的操作都需要用到MS的Jet引擎,上面的连接串在有Jet的情况下就可以操作成功,不过Jet的运行性能不高,所以,还有一个性能比较高但是有条件限制的Sql语句(内嵌连接字符串),就是SqlServer的DTS
条件,运行机器上需要有Sql
语句:
SELECT
*
FROM
OPENROWSET
(
'
Microsoft.Jet.OLEDB.4.0
'
,
'
Excel 8.0;HDR=NO;DATABASE=ExcelFilePath;
'
,WorksheetName$)
例如:
INSERT
INTO
t_wcall_log(up_id,up_num,up_result,sn_id)
SELECT * FROM OPENROWSET ( ' Microsoft.JET.OLEDB.4.0 ' , ' Excel 8.0;HDR=NO;DATABASE=D://BC_CALL.xls; ' ,统计$)
SELECT * FROM OPENROWSET ( ' Microsoft.JET.OLEDB.4.0 ' , ' Excel 8.0;HDR=NO;DATABASE=D://BC_CALL.xls; ' ,统计$)
其中SELECT子句中的*可以用Excel中的列名列表代替,当把Excel中的Worksheet当数据表处理的时候,需要在后面加上$,而且此时的Worksheet名不能以数字开头,否则将出现错误:在XXX中不存在表XX
如果要将数据由本地提交到局域网服务器上,可以将Excel所在的文件夹设置为共享,然后用“IP/文件名”替换掉上面的ExcelFilePath,如:
SELECT
*
FROM
OPENSET(
'
Microsoft.JET.OLEDB.4.0
'
,
'
Excel 8.0;HDR=NO;DATABASE=192.168.0.113//BC_CALL.xls;
'
,统计$)
其原理是利用本地Sql和服务器Sql之间的DTS进行传输操作,实际上和把数据放到本地Sql,然后再传到服务器Sql是一样的,只不过,用上面的语句可以利用一下Sql的内存表,数据直接过内存传输,而不产生真正的数据表