系列文章导航: 如何将数据导入到 SQL Server Compact Edition 数据库中(一) 如何将数据导入到 SQL Server Compact Edition 数据库中(二) 如何将数据导入到 SQL Server Compact Edition 数据库中(三) 摘要:在本系列文章的第一篇和第二篇为了提高数据写

系列文章导航:

如何将数据导入到 SQL Server Compact Edition 数据库中(一)

如何将数据导入到 SQL Server Compact Edition 数据库中(二)

如何将数据导入到 SQL Server Compact Edition 数据库中(三)

摘要:在本系列文章的第一篇和第二篇为了提高数据写入的性能,我使用了 SqlCeResultSet 基于表的数据写入方式,而不是使用常规的 Insert 语句。使用 SqlCeResultSet 写入数据确实方便又快速,但是必须保证从源数据库查询的结果集(通过 Select 查询语句)跟目标数据库(SQL Server Compact Edition)表的字段先后顺序一致。如果不一致,可能会导致数据导入出错;即便是导入成功,数据跟原来的字段位置也对不上。所以,我觉得有必要给大家介绍常规的 Insert 语句数据插入方式,解决 SqlCeResultSet 存在的问题。

在第三篇文章中,我们学习了 IDataReader.GetSchemaTable 方法,它可以返回一个描述了 DataReader 查询结果中各列的元数据的 DataTable。在前面的文章介绍的数据导入方法中,都是使用 DataReader 从源数据库读取数据。那么从这个 DataReader 获取的 SchemaTable 信息,就可以用于生成插入数据的 Insert 语句,前提是源数据库和目标数据库的表字段名称一致,字段的先后顺序可以不一样。以下是根据 SchemaTable 生成 Insert 语句的代码:

//通过 DataReader 获取 SchemaTable 信息srcReader=srcCommand.ExecuteReader(CommandBehavior.KeyInfo);

DataTable scheamTable=srcReader.GetSchemaTable();//生成 SQL Server Compact Edition 数据插入 SQL 语句StringBuilder sbFields=newStringBuilder();

StringBuilder sbParams=newStringBuilder();stringfield, param;

DataRow schemaRow;for(inti=0; i

{if(i!=0)

{

sbFields.Append(",");

sbParams.Append(",");

}

schemaRow=scheamTable.Rows[i];

field=string.Format("[{0}]", schemaRow["ColumnName"]);//字段名称param="@"+((string)schemaRow["ColumnName"]).Replace("","_");//参数名称sbFields.Append(field);

sbParams.Append(param);

destCommand.Parameters.Add(param,null);

}stringinsertSql=string.Format("INSERT INTO [{0}]({1}) VALUES({2})", destTableName, sbFields, sbParams);

destCommand.CommandText=insertSql;

生成 Insert 语句的代码很简单,这里就不再详细说明了。准备好了 Insert 语句,就可以开始从源数据库取数据并写入目标数据库了。这里我使用了 DataReader.GetValues 方法一次性读取一整行数据,再给 Insert 命令的参数赋值。代码如下所示:

//执行数据导入object[] values;while(srcReader.Read())

{

values=newobject[srcReader.FieldCount];

srcReader.GetValues(values);for(inti=0; i

{

destCommand.Parameters[i].Value=values[i];

}

destCommand.ExecuteNonQuery();

}

本文的主要内容到这里已经介绍完了,我们可以结合第三篇文章介绍的根据 SchemaTable 自动生成创建表结构的 SQL 语句的代码,在导入数据前先自动创建数据表结构。相关的代码如下:

// 通过 DataReader 获取 SchemaTable 信息srcReader = srcCommand.ExecuteReader(CommandBehavior.KeyInfo);

DataTable scheamTable = srcReader.GetSchemaTable();//创建 SQL Server Compact Edition 表结构SqlCeCommand command=destConnection.CreateCommand();

command.CommandText=GenerateTableSchemaSql(scheamTable);

command.ExecuteNonQuery();

// 生成 SQL Server Compact Edition 数据插入 SQL 语句

StringBuilder sbFields = new StringBuilder();

StringBuilder sbParams = new StringBuilder();

......

通过遍历 SQL Server 2000 的 Northwind 数据库的每个用户表,并将每个表的数据导入到一个 SQL Server Compact Edition 数据文件 Northwind.sdf 中。代码如下所示:

//创建源 SQL Server 数据库连接对象stringsrcConnString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True";

SqlConnection srcConnection=newSqlConnection(srcConnString);//创建目标 SQL Server Compact Edition 数据库连接对象stringdestConnString=@"Data Source=C:/Northwind.sdf";

SqlCeConnection destConnection=newSqlCeConnection(destConnString);//创建 SQL Server Compact Edition 数据文件VerifyDatabaseExists(destConnString);

srcConnection.Open();

destConnection.Open();//复制数据string[] tableNames=GetTableNames(srcConnection);stringquery;for(inti=0; i

{

query=string.Format("SELECT * FROM [{0}]", tableNames[i]);

CopyTable(srcConnection, destConnection, query, tableNames[i]);

}

srcConnection.Close();

destConnection.Close();

同第二篇文章相比,本文中的 VerifyDatabaseExists 方法只创建 SQL Server Compact Edition 数据文件,不批量创建表结构,因为我们用上了“自动”的方法,不需要预先准备好创建表结构的 SQL 脚本。GetTableNames 和 GenerateTableSchemaSql 方法跟第三篇文章的一样,这里不再解释。

总结:本文介绍了一种比 SqlCeResultSet 更安全的数据写入方式,并结合了第三篇文章中介绍的自动生成创建数据库表结构的 SQL 语句的方法,向大家展示了一种比较完善的 SQL Server Compact Edition 数据导入方法。在后续的文章中我会继续深入下去,提供本方案在实际应用中面临的问题的解决方法。

示例代码下载:sqlce_data_import4.rar

作者:黎波

博客:http://upto.cnblogs.com/

日期:2008年2月9日

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

sql compact 转mysql_如何将数据导入到 SQL Server Compact Edition 数据库中(四)相关推荐

  1. sql compact 转mysql_如何将数据导入到 SQL Server Compact Edition 数据库中(五)

    系列文章导航: 如何将数据导入到 SQL Server Compact Edition 数据库中(一) 如何将数据导入到 SQL Server Compact Edition 数据库中(二) 如何将数 ...

  2. sql compact 转mysql_如何将数据导入到 SQL Server Compact Edition 数据库中(三)

    系列文章导航: 如何将数据导入到 SQL Server Compact Edition 数据库中(一) 如何将数据导入到 SQL Server Compact Edition 数据库中(二) 摘要:时 ...

  3. 如何将数据导入到 SQL Server Compact Edition 数据库中(四)

    系列文章导航: 如何将数据导入到 SQL Server Compact Edition 数据库中(一) 如何将数据导入到 SQL Server Compact Edition 数据库中(二) 如何将数 ...

  4. 将excel数据导入到SQL server数据库,SQL server引入导入excel报表,如何解决“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”问题

    目录 版本: 文章主要内容: 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序 新版本不同的设置的地方: 版本: SQL server2018.ex ...

  5. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息"is formatted to support  1 media fami ...

  6. java sqlldr导入_使用SQL*LOADER将TXT或CSV数据导入ORACLE(转)

    一.简介 SQL*LOADER是ORACLE的数据加载工具,通常用来将操作系统文件迁移到ORACLE数据库中.SQL*LOADER是大型数据仓库选择使用的加载方法,因为它提供了最快速的途径(DIREC ...

  7. excel导入mysql语句_求助:用SQL语句从Excel将数据导入到SQL数据库

    这个是Excel的,比如是test.xls 欠费年份 欠费开始月份 欠费结束月份 应缴金额(月租) 2001             9                 12            9 ...

  8. 超大Sql文件_超大文件_mysql数据导入到mycat数据库_亲测好用---Linux运维工作笔记053

    对于mycat数据导入,最近一直在研究,因为有个客户的mysql数据库中,单表数据已经30多个GB, 存了上亿条的数据. 查询速度远远跟不上需求了,这个时候,我做了一个mycat集群,用了22台cen ...

  9. 怎样将Excel中的数据导入到SQL Server 2000数据库中

    1.打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务-->导入数据,弹出DTS导入/导出向导,按 下一步 , 2.选择数据源 Microsoft Excel 97-2000,文件名 ...

最新文章

  1. MTK6589下传感器框架结构和代码分析以及传感器的参数指标
  2. 汇编语言之常见的汇编指令
  3. python中调用是什么意思_在Python中调用函数的含义?
  4. Manacher算法 - 求最长回文串的利器
  5. Qt Creator 4.9 发布
  6. 对字符串进行折半查找c语言,C语言:编写折半查找函数
  7. fatal: Not a git repository (or any of the parent directories): .git的解决办法
  8. vbs脚本巡检windows主机
  9. 1206_MISRA_C规范学习笔记_Rule 10.1 Rule 10.2
  10. 1818. 绝对差值和
  11. 在aspx页面显示一张完整的RDL报表
  12. OSChina 周五乱弹 ——程序员会喜欢的 12 款键盘
  13. 【VMCloud云平台】SCAP(四)租户(二)
  14. 定时/计数器的原理和应用
  15. Windows一键启动jar包bat脚本制作
  16. 代理IP的主要用途和使用注意事项
  17. 就问你怕不怕!新型AI让黑客行为变合法了……
  18. OpenCV 4.5.1 - 新版本 中 BEBLID 描述符尝鲜 (基于 ubuntu / c++)
  19. 索尼VAIO笔记本电脑Windows 8改成Windows 7
  20. html如何让图片自动消失,如何让按钮背景可以渐渐显示和渐渐消失_html/css_WEB-ITnose...

热门文章

  1. win11中wsa使用fiddler抓包(https)
  2. 物联网让生活更加轻松的五种方式
  3. 往word表中写数据
  4. 苹果开启了UWB上下游成熟的大门
  5. Android WebView播放视频并支持全屏
  6. 如何做到精准引流获客?
  7. 设计师和程序员必备5个超赞的配色工具,从此配色无忧!
  8. python之 logging模块详细使用【转载】
  9. Aspose.Words 复制表格并将复制的表格插入原有表格后面
  10. [转贴]郎恒《齐天大圣》Rap 搞笑!