*--需要WebView2.DLL V.105版以上支持
*--如: 将VFP的cursor导入MSSQL
*--如:SQL服务器在本机
*--要使用本DemO需要在MSSQL建立表“test” 目录:\testdata\test.sql 有表结构脚本
Local lcstrOledbConn ;
, lcstrSQLServertConn ;
, lcSql ;
, lcFilename ;
, lnTimeOut ;
, lisIdentity ;
, lnBatchSize ;
, lnRowcount ;
, lnColCount ;
, lcErrorMsg ;
, lntimeStart ;
, loNetFunction ;
, lcPath
Local lcPath
If _vfp.StartMode = 0 Then
m.lcPath = Addbs( Justpath( _vfp.ActiveProject.Name ))
Else
m.lcPath = Addbs( Justpath( sys(16,0) ) )
Endif
*--耗时
m.lntimeStart = Seconds()
*--SQL连接配置信息
m.lcstrSQLServertConn = [uid=sa; pwd=1234567;Database=autoparts;Server=127.0.0.1;Connect Timeout = 50; Max Pool size=1024;Min pool Size=5]
*--Excel表格文件所在路径+文件名.扩展名
m.lcFilename = lcPath + [testdata\test.xlsx]
*--EXCEL 2016 (其它版本自行在网上搜索C# OleDB Excel 驱动配置信息)
*!* Data Source: Excel的路径
*!* Extended Properties: 设置Excel的特殊属性
*!* HDR :取值Yes、No YES: 表示第一行包含列名,在计算行数时就不包含第一行
*!* IMEX :取值如下 0: 导入模式 ;
1: 导出模式 ;
2: 混合模式(这一步需要根据需求进行设置,否则会由于权限不够导致无法读写成功)
m.lcstrOledbConn = [Provider=Microsoft.ACE.OLEDB.12.0;Data Source=]+ m.lcFilename + [;Extended Properties='Excel 12.0;HDR=YES;IMEX=0']
m.lnTimeOut = 60 &&超时秒数
m.lnBatchSize = 10000 &&BatchSize
m.lisIdentity = .F. &&是否导入到SQL表时重新生成ID
m.lnRowcount = 0 &&地址回参返回导入行数
m.lnColCount = 0 &&地址回参返回导入列数
m.lcErrorMsg = "" &&错误信息
*--实例化类
m.loNetFunction = Createobject( "Netsuite.Function")
*--查询语句
Text To m.lcSql Textmerge noShow
Select id,pano,pana,orig,md From [Sheet1$]
Endtext
*--执行(成功=.T. |失败-.F.)
If m.loNetFunction .SQLBulkInsert( 'test' ; &&SQL导入的表名
, m.lnTimeOut ; &&超时时间
, m.lnBatchSize ; &&多少条一个批次
, m.lisIdentity ; &&是否导入到SQL表时重新生成ID
, m.lcstrOledbConn ; &&预导入文件的OLE驱动配置信息
, m.lcstrSQLServertConn ; &&与SQLServer连接配置信息
, m.lcSql ; &&用什么VFP SQL语句去抓取本地磁盘文件上传到SQLServer
, @lnRowcount ; &&成功导入多少行
, @lnColCount ; &&成功导入多少列
, @lcErrorMsg ) &&错误信息
Messagebox( '导入MSSQL耗时:' + Transform( Seconds() - m.lntimeStart ) + '记录数:' + Transform( m.lnRowcount ) , 64 )
Else
Messagebox( m.lcErrorMsg , 16 , 'SqlBulkcopy' )
Endif