65.9K
CodeProject 正在变化。 阅读更多。
Home

将 SQL Server 数据库转换为 SQLite 数据库

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (238投票s)

2008年6月13日

公共领域

4分钟阅读

viewsIcon

1691713

downloadIcon

99036

一个 C# 实用程序, 可自动将 SQL Server 数据库转换为 SQLite 数据库

convsqlservertosqlite/converter.png

引言

作为一个数据库迁移项目的一部分,我需要将现有的 SQL Server 数据库转换为 SQLite 数据库,但找不到任何体面的免费转换器来完成这项工作。

这是我解决这个问题的尝试。不过,我得警告你,我没有太多时间在太多数据库上进行测试。无论如何,源代码都有很好的文档记录,易于理解,所以如果你遇到问题,应该很容易修复。(请将修复后的源代码发给我。如果你这样做,我可以更新软件,让每个人都能享受到它。)

Using the Code

代码分为两个项目:一个数据访问项目(类库),其中包含实际的转换代码;一个转换器项目(WinForms),它驱动转换代码并提供简单的用户交互界面。

执行转换的主要类是 sqlservertosqlite 类。它通过执行以下步骤来完成转换:

  1. 读取指定的 SQL Server 架构,并准备一个 tableschema 对象列表,该列表包含每个 SQL Server 表(以及索引等相关结构)的架构。
  2. 使用从 SQL Server 读取的架构准备一个空的 SQLite 数据库文件。在此步骤中,代码可能会修改一些 SQL Server 类型,这些类型在 SQLite 中不直接支持。
  3. 将每个表的数据行从 SQL Server 数据库复制到 SQLite 数据库。

基本上就是这样!

关注点

为了读取 SQL Server 数据库架构,我主要使用了伪 information_schema.table 表。如果你想了解更多信息,可以在网上搜索。

历史

  • 2008 年 6 月 13 日:初始版本
  • 2008 年 7 月 8 日:v 1.2
    • 修复了一个在某些情况下导致唯一索引被生成为非唯一索引的错误
  • 2008 年 7 月 8 日:v 1.3
    • 修复了一个在处理索引信息时导致实用程序有时崩溃的错误
  • 2008 年 7 月 17 日:v 1.4
    • 修复了一个在极少数情况下导致错误列成为主键的错误,并提高了转换性能
  • 2008 年 7 月 20 日:v 1.5
    • 增加了对不区分大小写的列的支持(COLLATE NOCASE
  • 2008 年 7 月 22 日:v 1.6
    • 增加了对加密结果数据库文件的支持(使用 SQLite .NET 提供程序中内置的加密支持)
  • 2008 年 10 月 5 日:v 1.7
    • 修复了 information_schema 引用,使其使用大写字母以解决国际字符集问题(土耳其语)
  • 2008 年 12 月 14 日:v1.8
    • 集成了 Yogesh Jagota 对外键的修改支持
    • 合并了选择性表导入的支持
  • 2009 年 2 月 21 日:v1.9
    • 添加了 johnny dickson cano 的贡献,允许使用 SQL Server 集成身份验证或使用用户名/密码进行选择
    • 增加了对将 IDENTITY 列转换为 SQLite 的 AUTOINCREMENT 的支持(Paul Shaffer 的建议)
  • 2009 年 3 月 4 日:v1.10
    • 修复了一个导致转换器在遇到原始 SQL Server 架构中的 datetime 字段时崩溃的错误。感谢 bmcclint 发送了带有正确 bugfix 的 bug。
  • 2009 年 5 月 23 日:v1.11
    • 增加了使用触发器模拟外键的支持(由 Martijn Muurman 贡献)
    • 添加了一个小的 bugfix,以便现在 'int' 类型始终转换为 'integer' 类型。这是必需的,因为 SQLite 仅在 'integer' 列类型上自动递增。
  • 2009 年 6 月 4 日:v1.12
    • 修复了触发器生成代码中的一个错误,该错误在多列引用外表中的同一列时导致架构生成失败
  • 2009 年 9 月 20 日:v1.13
    • 修复了 MAEP 建议的 AUTOINCREMENT 错误
    • 修复了 64 位支持问题(感谢 Murry Gammash)
    • 增加了对转换 SQL Server 视图的支持(Richard Thurgood 的建议)
  • 2009 年 9 月 22 日:v1.14
    • 修复了一个关键错误,该错误导致在某些使用 [dbo] 表示法的 SQL Server 数据库上转换过程失败。
  • 2009 年 9 月 25 日:v1.15
    • 修复了一个关键错误,该错误导致主键被丢弃
    • 修复了触发器生成错误
  • 2009 年 12 月 4 日:v1.16
    • 修复了生成代码,为 SQL Server 的 uniqueidentifier 类型创建 GUID 类型(而不是像以前那样使用 nvarchar
    • 更新了解决方案以使用最新的 SQLite .NET 提供程序库
  • 2011 年 3 月 24 日
    • 附带了项目的编译版本,供所有没有 Visual Studio 但仍需要使用该实用程序的人使用
  • 2011 年 7 月 1 日
    • 更新了二进制 zip,因为之前的 zip 文件缺少应用程序所需的 DLL 文件
  • 2011 年 11 月 15 日:v1.17
    • 修复了一个导致软件在遇到 SQL Server 元数据表中的 NULL 值时崩溃的错误
  • 2012 年 6 月 19 日:v1.19
    • 增加了在创建数据库架构时忽略视图的支持,增加了对列名中空格字符的支持。
  •  2013 年 1 月 14 日:v1.20
    • 修复了与列名相关的问题
    • 增加了数据库名称组合框的宽度。
© . All rights reserved.