用DTS实现SQL数据库的导入[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 minajo21 的 blog

    在实际应用当中,我们经常需要对数据库进行导入导出的操作,sql自带的dts向导应该说是很方便的工具,但是有的时候这种导入的操作是要求客户自己来完成的,这样就要求我们在代码中实现这种功能,而且根据实际需要,操作要更加友好。下面就以vb+sql为例,根据本人的一点经验,做一些简单的介绍。

    1. 原文档的提供
    实际当中,最常用的两种格式是txt、xls,即文本文件和excel文件。

    1.1 文本文件
    文本文件在导入的时候最要注意的就是行与列的分隔,即用什么来区分行、列,从而与数据库中的目标表中的字段来进行对应。一般说来,分隔行,一般用回车、换行符,而列则一般可用tab、","、";"、"|"等符号。

    1.2 excel文件
    excel文件和数据库中的表,有以下的对应关系
   
    excel               table
    "sheet name"    "table"
    "a1"                "field name 1"
    "b2"                "field name 2"
    ...

    另外要注意的是,在导入时,无论文本文件或是excel文件,第一行都是可选做目标表的字段名的。


    2. 导入数据的方法
    如果你愿意,完全可以用代码来控制,实现从文本文件或excel文件一条一条地读出数据,然后在一条一条地insert到表中。但这显然是不能满足大量数据的导入的。在实际当中,比较常用的有:sql的opendatasource方式,bcp方式,以及dts方式等等,各有各的特点。

    3. 示例
    由于篇幅等的限制,下面仅举一个用dts导入文本文件的例子。(如果你缺少点dts的基础知识,请先参阅一下这方面的介绍)

    假设文本文件名为test.txt,其中的数据格式为:

    0001   anna    maltelli
    0002   maria   shearer
    0003   shanda  carroll
    ...

    我们首先分析,这个文件是以tab来分隔列,以(cr)(lf)来分隔行的。
    以下是一个sql目标数据库的一些信息:
    private strservername as string                'server name
    private strdbname as string                    'database name
    private strdbuser as string                    'database user name
    private strdbuserpsd as string                 'database user password
    这些变量假设在次之前都已经正确的附值了,在下面的代码中就直接用了

    下面开始动手:

    引用:microsoft dtspackage object library

    下面是完成数据导入的主function。
    进参:文本文件的路径及文件名
    返回:成功,true
          失败,false 及 错误号

private function import_dts(strpath as string) as boolean
    dim oconnection as dts.connection
    dim ostep as dts.step
    dim otask as dts.task
    dim opackage as dts.package2
    dim ocustomtask as dts.bulkinserttask
    on error goto packageerror

    import_dts = true
   
    '建立数据包
    set opackage = new dts.package
    opackage.failonerror = true
    set oconnection = opackage.connections.new("sqloledb")
    set ostep = opackage.steps.new
    set otask = opackage.tasks.new("dtsbulkinserttask")
    set ocustomtask = otask.customtask
   
    '与数据库进行连接,为了清楚起见,这里我单独写了一个过程,即 setconnections
    '具体可以参考private sub setconnections
    setconnections opackage, oconnection
   
    with ostep
        .name = "genericpkgstep"
        .executeinmainthread = true
    end with
   
    'customize the task object
    with ocustomtask
        .name = "genericpkgtask"
        '文本文件的路径
        .datafile = strpath
        .connectionid = 1
        '注意目标表的写法
        .destinationtablename = strdbname & "..drivername"
        '以tab分隔列
        .fieldterminator = vba.chr(9)

本文关键:DTS
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top