数据库部署实践

时间:2011-06-07 14:46:24

标签: c# sql deployment

我已经为我的客户部署了大量软件。主要是Window Forms应用程序。 这是我目前的做法。

  1. 手动将SQLExpress和SQL Management Studio安装到每台客户端PC。
  2. 然后使用ClickOne从服务器安装代码。
  3. 当代码发生变化时,我将使用ClickOne进行部署 - (此步骤无问题)
  4. 但是当数据库列发生变化时,我该怎么办?
  5. 我甚至尝试过编写数据库更新脚本。每次程序启动时,它将读取.sql更新文件并在数据库存在时运行它们。这解决了更新数据库列的问题,但是当我的客户抱怨数据错误时,它在我的DEBUGGING工作中没有帮助。那时,我必须亲自前往他们的网站查看。

    我发现很难在客户端PC上安装数据库,因为它使我的调试工作非常困难。我正在考虑将我的客户端数据库移动到在线服务器上的主机。但那就是这些限制因素:

    1. 如果互联网出现故障怎么办?
    2. 如果我的客户没有互联网怎么办?
    3. 你帮忙建议我吗?这是开发人员面临的常见问题吗?有什么常见的做法? Window Azure或SQL CE是否有帮助?

3 个答案:

答案 0 :(得分:1)

每台客户端PC安装一个数据库可能会非常棘手。我认为你对如何处理目前的问题有一个很好的处理。您目前面临的真正问题似乎是调试。要解决这个问题,您可以采取以下几种方式:

  1. 让客户将他们的数据库副本上传给您。这将为您提供他们拥有的数据,您可以将其与代码的调试副本一起使用以识别问题。缺点是,如果数据库很大,可能是转移它的问题。
  2. 远程登录客户的机器。使用CoPilot之类的东西远程观察系统。通过这种方式,您可以看到其自然环境中正在发生的事情。
  3. 可能还有其他方法,但这些方法很好。至于使用在线数据库,这是一个选项,但它带来了一系列问题。你提到了一对。至于Azure,这是基于云的(在线),因此同样的问题将适用。 SQL CE对您的帮助不会超过您当前的安装。

    最重要的是,我建议您研究修复一个问题的方法(如上所列),而不是通过转移到基于Internet的解决方案来创建一整套新问题。我只建议移动到互联网,如果它解决了更大的业务需求(例如,移动性)。做你在网上做的同样的事情可能会让生活变得更加艰难。

    回顾下面的评论,因为它们与问题非常相关,如果您选择不需要在机器上进行物理安装的基于文件的数据库,那么您最好的选择可能是在SQLite和SQL CE之间。 Microsoft更好地支持SQL CE,但它是一个更大的包,并且具有比修剪SQLite更少的功能。以下是对差异的良好讨论:

    https://stackoverflow.com/questions/2278104/sql-ce-sqlite-what-are-the-differences-between-them

    但是,当您开始查看linq2sql时,问题变得更加复杂,因为它是为SQL Server设计的。微软不支持带有linq2sql的SQL CE,虽然有一种解决办法可以使它工作:

    http://pietschsoft.com/post/2009/01/Using-LINQ-to-SQL-with-SQL-Server-Compact-Edition.aspx

    linq2sql根本不支持SQLite,但有一种方法可以使用linq与SQLite交谈:

    LINQ with SQLite (linqtosql)

    该库还支持其他常见数据库,包括MySQL和Firebird。

答案 1 :(得分:1)

根据数据,我建议使用SQL CE。 如果数据不是太多,速度不是主要目标(CE比Express慢)并且您不需要CE不支持的DB功能(例如存储过程)它是更好的选择恕我直言,因为:

  • 客户端不需要安装完整的SQL服务器(更容易安装/部署)
  • 多个SQLExpress实例没有问题
  • 如果有SQL实例
  • ,您的SW并不需要担心
  • 客户端使用的资源减少

此外,客户可以发送他们的SQL CE DB-File进行检查,您无需访问他们的网站。

使用SQL CE和MS Sync FW实现异地同步也相对容易。

答案 2 :(得分:0)

您可以使用SQLCMD实用程序执行更改脚本,如this相关问题

中所述
相关问题