探讨VFP9.0到SQL2008的数据迁移

2018-03-22 01:37吴昊江苏省木渎高级中学
数码世界 2018年3期
关键词:段长度数据类型字段

吴昊 江苏省木渎高级中学

VFP是Microsoft公司推出的可视化数据库管理系统平台,是功能强大的32位数据库管理系统,对于轻量化的数据管理系统开发来说,VFP是最为快捷高效的,时至今日,仍然有不少应用是用VFP开发,但随着WEB应用开发的需求越来越高,MYSQL、SQL、ORACLE这些数据库管理软件更适合网络化时代的需要,本文就VFP数据如何转入SQL SERVER来做一个探讨。

1 数据迁移中需要关注的问题:

要注意VFP和SQL SERVER之间的数据格式的区别,如果通过EXCEL进行间接转换,原有数据表的结构就无法保证了,在做数据迁移时,需要把VFP和SQL SERVER的数据类型进行对照,在转换过程中,还需要注意到原数据中实际存放的信息,如果是字符型且带有变长中文的,如姓名字段,那么在迁入SQL SERVER时,对应的数据类型应该是nvarchar,否则会导致中文信息无法显示。DBF中的时间类型字段T可以仅存储时间,无年份日期值,在迁入SQL SERVER的datatime类型时会因为年份是0000而报错,需要提前做好预处理。

2 实现过程:

由于dataset和sql server之间的衔接最方便,首先,通过oledb方式将DBF文件的数据读取到dataset中,但在实际读取时,OleDbDataAdapter的fill方法读取到的字段长度是固定的(最大长度),为保证迁入SQL SERVER的同时节省空间,还需要通过FillSchema方法把原DBF的数据结构保存下来:

public DataSet importDbfToDataSet(string FilePath){

string strDir=Path.GetDirectoryName(FilePath);

String Tabname=Path.GetFileNameWithoutExtension(FilePath);

string strSelect = "SELECT * FROM "+Tabname;

string conStr = @"Provider=VFPOLEDB.1;Data Source=" + strDir + ";Collating Sequence=machine;";

O l e D b C o n n e c t i o n c o n n = n e w OleDbConnection(conStr);

conn.Open();

O l e D b D a t a A d a p t e r d a = n e w OleDbDataAdapter(strSelect, conn);

DataSet ds = new DataSet();

da.Fill(ds,"source");

da.FillSchema(ds, SchemaType.Mapped,"structure");

//数据保存在source表,结构保存在structure表

conn.Close();

return thisDataSet;}

第二步,则是遍历数据集中的结构表,在SQL SERVER中建立对应的数据表,这里需要做一个数据类型的转换,以常见的字符型、整型、布尔型、日期型为例,由于是已经读取到datatable中,所以应该是判断系统的数据类型转换为对应的SQL SERVER中的数据类型:

public DataType GetDataType(string dataType,int length){

DataType DTTemp = null;

switch (dataType){

case ("System.Decimal"):

DTTemp = DataType.Decimal(2, 18); break;case ("System.String"):

DTTemp = DataType.NVarChar(length);break;case ("System.Int32"):

DTTemp = DataType.Int;break;case ("System.Boolean"):

DTTemp = DataType.Bit;break;case ("System.DateTime"):

DTTemp=DataType.DateTime;break;}return DTTemp;}

根据读取到的数据类型和字段长度,在SQL SERVER中建立好对应的数据表:

foreach(DataColumn dc in dtStruc.Columns){

tempTc = new Column(newTable, dc.ColumnName);tempTc.DataType=GetDataType(dc.DataType.ToString(),dc.MaxLength);

newTable.Columns.Add(tempTc);}

前面这些步骤完成后,接下来要用到SQL SERVER的一个SqlBulkCopy类,这个类用于数据库之间大批量的数据传递。通常用于新、旧数据库之间数据的更新。即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来,源数据可以用Datatable,也可以用SqlDataReader。因为SqlDataReader不占用内存,如果是对大批量的数据复制,不需要事先导入到系统,可以优先采用DataReader方式,这两个方式导入数据的效率,都要比直接insert into要高得多:

SqlBulkCopy sbc = new SqlBulkCopy(conn)

sbc.DestinationTableName = strDesTable;

sbc.WriteToServer(dt);

通过以上步骤,可以实现VFP到SQL的远程数据迁移,至于SQL SERVER中的数据到导出到DBF,通过管理工具中的DTS数据转换服务很方便地实现。

希望本文能给那些需要进行VFP和SQL SERVER进行数据迁移的用户一些帮助,也希望广大IT同仁对本文存在的不足能给予指正。

[1]王倩,王伟.基于ASP.NET的数据迁移方法[J].现代电子技术 ,2008(18):71-73.

[2]柴荣君,马惠铖.基于VFP环境下进行数据转移的方法探究[J].科技资讯 ,2010(30):28.

猜你喜欢
段长度数据类型字段
高速公路改扩建高边坡预应力锚索施工技术研究
巧用参数法解答一类定值问题
带钩或不带钩选择方框批量自动换
煤矸光电分选输送机上料段物料冲击稳定性研究*
如何理解数据结构中的抽象数据类型
浅谈台湾原版中文图书的编目经验
首排锚杆锚固段长度对基坑顶地表裂缝开展的影响分析
基于SeisBase模型的地震勘探成果数据管理系统设计
线上众筹产品的特征分析与研究
相似度计算及其在数据挖掘中的应用