使用客户端应用程序安装数据库的工具或最佳实践

时间:2010-09-24 14:53:37

标签: .net sql installer

我已经提出了两种方法来使用我的WPF应用程序安装本地数据库:

  1. 创建数据库备份,然后通过SMO
  2. 在安装程序中恢复
  3. 安装数据库脚本并通过ADO或osql.exe
  4. 执行

    我需要提供升级路径,而不是仅删除当前安装的数据库。

    还有其他方法更灵活吗?是否有更好/更容易管理的工具?

3 个答案:

答案 0 :(得分:1)

你看过Sql Server Compact 3.5 SP1吗?安装只是复制数据库文件和引用项目中的程序集的问题。

http://www.microsoft.com/sqlserver/2008/en/us/compact.aspx

对于升级路径,您的意思是什么?相同应用程序和数据库的未来更新版本?

答案 1 :(得分:1)

我看到的支持增量升级的方法都是维护一组“更改脚本”的方法。对于初始安装,您可以将已知的“干净”备份还原到新数据库,或者可以使用SQL脚本或ORM工具将架构投影到DMBS中。 NHibernate能够在给定映射配置的情况下生成模式,您可以从安装程序内部设置此行为。

安装数据库后,您必须逐步更新。这通常意味着为数据库的每次更改创建一个脚本,并将它们包含在安装包中,使用“runner”(一个简单的批处理过程),它将遍历脚本并针对数据库执行它们。如果它们依赖于顺序,请确保您的文件结构考虑到这一点(但通常最好在必须首先执行一个脚本时合并两个脚本)。还要确保改变不是“破坏性的”;例如,向表中添加列不会涉及删除和重新创建表,即使代码较少也是如此。此更改还必须是可重复的或非重复的,因为您可能必须两次包含相同的脚本。这可能意味着要跟踪您已执行的脚本的名称,和/或让每个脚本在执行之前检测到它所做的更改尚未完成。

请记住,如果您使用视图,存储过程或SQL函数,可以随意删除和重新创建这些,而不会影响数据。

最后,确保在执行更新之前关闭或删除所有正在更新的数据库的连接,以避免出现不可预测的行为。

答案 2 :(得分:1)

对于初始安装,请执行db的还原。始终使用应用程序发布当前版本的数据库。

对于更新要求,您需要一个更改脚本列表,每个新版本一个。我喜欢RoR方法,其中db包含版本。

这样可以更容易地检查数据库所在的版本,并在其后应用所有更改脚本。