Bulkcopy(二),导入EXCEL到MSSQL

*--需要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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值