您当前的位置:论文发表网论文中心计算机类计算机理论
 子栏目导航
电子商务
计算机应用
计算机理论
计算机网络
 最新推荐
· 毕业论文写作的基本要求...
· 轰响新机制的黄钟——论...
· 叙事差异与价值取向——...
· 中国电视主持人职业生涯...
· 创办国家级电视新闻频道...
· 信息的重复和缺失——对...
· 境外电视频道落地广东的...
· 传媒话语生产与控制
· 试论一种特殊的传播方式...
· 浅析知识经济时代图书编...
· 广告中女性形象的思考
· “传媒外交”初探
 热门文章
  • 毕业论文写作的基本要求...
  • 轰响新机制的黄钟——论...
  • 论中外合作经营企业先行...
  • 我国保险业应对WT0的思考...
  • WTO背景下中国广播电视业...
  • MAS-2型微机自动准同期装...
  • 陈寅恪“守老僧之旧义”...
  • 固体废弃物的焚烧对生物...
  • 武警学院地热供热站房设...
  • PLC控制系统与智能化中央...
  •  相关文章
    · Foxpro DBF数据库转...
     
    Foxpro DBF数据库转换成SQL Server 6.5表的几种方法

    减小字体 增大字体

    关键词:Xbase DBF SQL Server 数据库 转换

    1、前言

    当今,数据库联网实现数据共享已经成为信息系统建设中一个迅速发展的潮流。利用SQL Server、Oracal、Sybase等客户机/服务器(Client/Server)体系结构的数据库系统进行信息系统的开发、更新改造已成为当前一大趋势。而Dbase、Foxbase、Foxpro是我国近年应用较为广泛的数据库开发软件,许多单位、部门多年来积累了大量的宝贵的数据资料,这些部门在进行计算机信息系统改造、更新的同时,面临如何继承大量历史数据的问题,本文介绍三种将DBF数据转换成SQL Server表的方法。

    2、利用SQL Server所提供的块拷贝实用程序(bcp)转换

    实用程序bcp.exe可从服务器SQL目录下的BINN子目录下获得。

    2.1、bcp的 命令格式及主要参数

    bcp [[database_name.]owner.] table_name {in|out} datafile [/m maxerror ][/f formatfile] [/e errfile] [/n] [/c] [/t] field_term] [/r row_term] [/U login_ID] [/P password] [/S servername] [/v version] [/a packet_size]
    主要参数:
    database_name    数据库名
    in|out        in从文件到数据库表的拷贝。
                out从数据库表到文件拷贝。
    datafile         操作系统文件的路径。该路径的长度可以是
    1-255个字符。也可指明磁盘驱动器名字。
    /C             用字符类型作为缺省值执行拷贝操作。
    /u login_ID    指定登录标识符。
    /P password    允许指定一个口令。
    /S servername    允许用户指定连接到哪个SQL Server

    2.2、实现转换的具体方法

    我们以Foxpro的数据库结构的单位职工库(zg.dbf)为例,进行数据转换。其数据结构为:

    字段名 类型 字段长度 小数点位数 字段内容
    bh C 4 职工编号
    xm C 8 职工姓名
    xb C 2 性别
    nl N 2 0 年龄
    zw C 10 职务
    gzsj D 参加工作时间
    jl M 简历
    zp G 照片

    实现步骤:

    (1)、启动服务器,进入Window NT,SQL Server 6.0,打开SQL Enterprise Manager为单位职工库创建一个数据库设备zg.dat,然后在该设备上建立zg数据库及表(Table),表的数据结构要与zg.dbf的数据结构一致。或用以下SQL Server命令创建设备和创建表。

    A、创建数据设备
    disk init
    name='zg'                     数据库设备名
    physname='c:\\zg\\zg.dat'    数据库文件所在路径
    vdevno=8                     数据库设备的标识号
    size=5120                     数据库设备大小(10M)

    B、建立zg表
    create database zg_data on zg=1024,log on zg=1024     建立数据库
    use zg_data
    create table zg ( bh char (4) null, xm char (8) null, xb char (2) null, nl int null, zw char (10) null,gzsj datatime null, jl text null, zp image null ) 建立表
    go

    (2)、在客户机上启动Foxpro,用USE命令打开需转换的.dbf文件,用COPY命令将.dbf文件中数据转换成标准的文本文件.txt,命令如下:
    use zg.dbf
    copy all to zg.txt deli with blan

    (3)、从客户机登录到Windows NT服务器上,将zg.txt文件拷贝到服务器的职工库目录c:\\zg下。

    (4)、在服务器上,由Windows NT进入到MS-DOS状态,然后执行bcp将数据从zg.txt转换到SQL表,命令格式如下:

    bcp zg in zg.txt /c /s mainserver /u manager /P 0001 (mainserver为服务器名,manager为用户名,0001为用户口令)。

    该转换方法速度较快,不占用服务器上事务日志空间。但较为复杂、繁锁,操作者必须熟练掌握Foxpro、SQL Server的命令和操作,而且无法将Foxpro的Memo、General字段转换到SQL Server表。

    3、用Foxpro for Window 2.5 编程实现转换

    "用Foxpro编程实现数据转换"即通过SQL Server提供的ODBC接口(开放数据库接口)及Foxpr提供ODBC接口工具Connectivity Kit (fpsql.fll),建立SQL与Foxpro的连接,由Foxpro向SQL Server提交创建表命令,然后将.dbf的每条记录,串成一个字符串,将插入命令连同字符串提交给SQL Server,完成数据转换。
    实现步骤:

    (1)、ODBC的设置:在客户机上启动Windows for group,进入Windows的控制面板( Control panel )。双击ODBC图标,进行zg数据库的ODBC驱动设置。

    选择"Add"增加新的ODBC驱动接口,在Install ODBC drivers项选择"SQL Server",按"OK",弹出"ODBC SQL Server Setup"窗口,在 Data source name项中输入"zg_data",Server项输入"mainserver",按"OK"完成设置。

    (2)、采用上述方法一中步骤1的⑴、⑵创建zg数据库设备及数据库,然后执行Foxpro程序crea_table,创建一个结构与.dbf结构相同的SQL Server表。程序清单如下:

    crea_table.prg 程序清单

    set talk off
    close all
    clear all
    clear
    store "" to dbf_name   
    && dbf_name 待转换的.dbf数据库
    store "" to sql_db
    && sql_db目的SQL数据库
    store "" to sql_com   
    && sql_com向SQL Server提交的命令
    store "" to sql_title   
    && sql_title 为向SQL Server提交命令字头
    store 0 to handle       
    && handle 为Foxpro与SQL Server连接的标识
    store 0 to success   
    && success为命令提交成功与否的标识
    set libr to fpsql.fll
    @2,20 say "请输入要转换的数据库(dbf)名:" get dbf_name
    @3,20 say "请输入目的SQL数据库名:" get sql_db
    read
    dbf_name=allt(dbf_name)
    sql_db=allt(sql_db)
    handle=dbconnect(sql_db, "sa","")   
    && 建立Foxpro与SQL Server连接
    if handle>0    && 若连接成功则
    use &dbf_name as op_dbf in 0
    &&以op_dbf为别名打开待转换数据库
    sele op_dbf
    copy to db_stru stru exte
    && 将其数据结构拷贝生成db_stru库
    use db_stru in 0
    sele db_stru
    goto top
    sql_com="creat table "+dbf_name+"( "
    do while .not. eof()
    sql_com=sql_com+field_name+" "
    do case
    case field_type="C"
    sql_com=sql_com+"char ("+;
    allt(str(field_len))+ ")"
    case field_type="N"
    if field_dec=0
    if field_len<8
    sql_com=sql_com+"int "
    else
    sql_com=aql_com+"float "
    endif
    else
            sql_com=sql_com+"float "
    endif
    case field_type="D"
    sql_com=sql_com+"datatime "
    case field_type="M"
    sql_com=sql_com+"text "
    case field_type="G"
    sql_com=sql_com+"binary "
    endcase
    skip
    if .not.eof()
    sql_com=sql_com+","
    endif
    enddo
    sql_com=aql_com+" )"
    success=dbexec(handle,sql_com)
    if success
    wait wind "SQL Server表已建立成功! "
    else
    wait wind "SQL Server表建立失败! "
    endif
    close all
    clear all
    retu
    else    && 若连接不成功
    wait wind "对不起,输入参数错误,无法连接SQL Server'
    clear read
    retu   
    endif

    (3)、再执行Foxpro程序conv_data将数据由.dbf传输到SQL Server表中。

    conv_data.prg 程序清单

    conv_data.prg 程序清单
    set talk off
    close all
    clear all
    clear
    store "" to dbf_name   
    &&dbf_name待转换的.dbf数据库
    store "" to sql_db   
    &&sql_db目的SQL数据库
    store "" to sql_com   
    &&sql_com向SQL Server提交的命令
    store "" to fname       
    &&fname字段名
    store 0 to handle       
    &&handle Foxpro与SQL Server连接的标识
    store 0 to success   
    &&success命令提交成功与否的标识
    set libr to fpsql.fll
    @2,20 say "请输入要转换的数据库(dbf)名:" get dbf_name
    @3,20 say "请输入目的SQL数据库名:" get sql_db
    read
    dbf_name=allt(dbf_name)
    sql_db=allt(sql_db)
    handle=dbconnect(sql_db, "sa","")
    &&建立Foxpro与SQL Server连接
    if handle>0    && 若连接成功则
    use &dbf_name as op_dbf in 0
    &&以op_dbf为别名打开待转换数据库
    sele op_dbf
    copy to db_stru stru exte
    &&将其数据结构拷贝生成db_stru库
    use db_stru in 0
    sele db_stru
    goto top
    sql_title="insert into "+dbf_name+" ( "
    do while .not.eof()
    sql_title=sql_title+field_name
    skip
    if .not.eof()
        sql_title=sql_title+","
    else
        sql_title=sql_title+" ) values ('"
    endif
    enddo
    sele op_dbf
    goto top
    do while .not.eof()
    sql_com=sql_title
    sele db_stru
    goto top
    do while .not.eof()
        fname=field_name
        do case
        case field_type="C"
            sql_com=sql_com+&fname
        case field_type="N"
            sql_com=sql_com+"convert(int(8),'"+str(*fname)+"')"
        case field_type="M"
            sql_com=sql_com+'null'
        case field_type="G"
            sql_com=sql_com+'null'
        endcase
        skip
        if .not.eof()
        sql_com=sql_com+"','"
        else
        sql_com=aql_com+"')"
        endif
    enddo
    success=dbexec(handle,sql_com)
    sele op_dbf
    skip
    enddo
    else    && 若连接不成功
    wait wind "对不起,输入参数错误,无法连接SQL Server"
    clear read
    retu   
    endif

    使用上述方法,只要知道一些简单的SQL Server操作及Foxpro编程便可实现将.dbf数据转换到SQL Server。运行程序然后输入待转换的数据库名,及目的数据库名就可实现转换,快捷方便。但不足的是,该方法在原数据库.dbf含有Memo、General字段时,转换就比较困难,目前尚没有找到有效的解决方法。

    4、用第三方数据库软件Access进行转换

    Access是Microsoft公司的数据库开发软件,使用Access提供的数据输入(Inport)/输出(Export)的功能及ODBC接口,可直接将数据结构及数据转送到SQL Server。
    实现步骤:

    (1)、按方法二中的第1、2步骤完成数据库设备、数据库创建和ODBC接口的设置。

    (2)、然后在Windows for Workgroup中启动Access,在File菜单中选择"new"创建一个新的Access数据库,然后在File菜单中选择"Attach table"连接zg.dbf数据库。

    (3)、在"Attach"窗口的"Data source"栏中选择数据库源为Foxpro 2.5,按"OK",之后弹出"Select Microsoft Access Database"窗口,在该窗口选择要转换的.dbf数据库zg.dbf,按"OK"结束,然后按"Close"完成数据库连接。

    (4)、在File菜单中选择"Export"输出数据,在"Export"窗口选择目标数据库类型"<SQL Server>"按"OK"进入下一窗口"Select Microsoft Access Object",在"Object in DB1"栏选择要转换的数据库zg, 在窗口的"View"栏下选择"Table"项,,按"OK"。

    (5)、进入"Export"窗口,在"Export zg to"栏目下输入目的数据库名zg,按"OK"。进入"SQL Data Sources"窗口,在"Select Data Source",选择在ODBC中定义好的zg数据源,按"OK"

    (6)、进入"SQL Server login"窗口,在"Login ID:"栏中输入登录用户名"sa",在"Password"栏中若有登录口令则输入口令。否则按"OK"开始进行数据转换。

    使用该方法用户不需要深入了解Foxpro命令及SQL Server命令,也不须深入了解Access操作,更不需对.dbf数据库的数据结构进行分析,Access可根据原.dbf数据库的结构自动在SQL Server上创建一个结构相同的表,并且可将原.dbf数据库中不论是字符型、数字型、日期型、Memo型、General型的所有数据转换到SQL Server表中。该方法可以简单、方便快捷、完整地将所有.dbf中的数据的转换到SQL Server。

    但使用该方法要注意一点,若要转换的数据量很大时,SQL Server中分配给该数据库的日志设备要足够大,或可在SQL Server中的ISQL/w命令窗口中用以下命令进行监控,并及时清除。

    dbcc sqlperf (logspace) 检查事务日志空间的使用量
    dump transaction zg with truncate_only 清除事务日志中已完成任务的数据

    5、结束语

    以上三种方法运行环境服务器端网络操作系统为Window NT 4.0,网络数据库为SQL Server 6.5,客户机Windows 95,Foxpro for Window 2.6,Access 97。

    方法二、方法三均通过ODBC数据接口进行数据转换。因此,这两种方法对Oracal、Sybase等数据库也可适用,只要对Windows中的ODBC数据接口设置作些改动,我们也可将.dbf的数据转换到Oracal或Sybase的表中。以此类推,只要数据库提供了ODBC功能,使用上述方法二、方法三均可实现两种数据库之间的数据转换。

    作者:范平川、罗春梅

    [] [返回上一页] [打 印] [收 藏]
    上一篇论文中心:WEB服务器多框架解决方案
    下一篇论文中心:如何测试软硬盘驱动器参数