管理C#项目中的数据库更改

时间:2011-03-07 22:55:03

标签: c# sql-server tableadapter

我有一个C#app(在VisualStudio 2010中),它使用通过C#中的TableAdapters访问的SqlServer 2005。

我还没有发现管理数据库更改的好方法。例如,在我的下一个版本中,我有一堆数据库架构更改。我在Sql Server Management Studio中进行了所有数据库更改。但是现在我必须在部署新的应用程序代码(慢速和错误)后依次在生产服务器上手动进行这些更改。

此外,如果我决定将我的版本回滚到以前的版本,我必须手动完成并撤消所有我的数据库更改,然后才能部署旧代码(现在我受到时间限制,因为应用程序已关闭)。同样,这也非常容易出错。

哦,让我希望我的一个错误不会对生产数据库造成大规模破坏,否则我现在必须从存储中取出最新的备份并重试(非常耗时)。

我听说过来自Rails的迁移(以及像SubSonic这样的ORM)。我认为新的ORM风格(用c#代码定义你的模式)有助于缓解很多这种情况,但遗憾的是,由于我使用的是TableAdapters,我看不出如何实现像迁移这样的东西。

人们如何处理这个问题?

3 个答案:

答案 0 :(得分:5)

DB的发布管理通常涉及迁移静态数据和运行脚本以更新/创建可编程性元素(sprocs,UDF,触发器等)并修改现有的模式定义。在我看来你错过了脚本。如果您手动对开发数据库进行更改而不创建反映这些更改的脚本,则需要针对您的测试/生产环境重复相同的手动步骤,正如您所说的那样容易出错并且很危险。

SQL Server Management Studio可以轻松保存反映任何数据库对象更改的脚本。在工具栏中应该有一个名为“生成更改脚本”的图标,该图标为您提供了将SQL文件保存到磁盘的选项。然后,您可以使用它来对另一台服务器执行相同的更改。您也可以手动编写任何或所有存储过程,UDF,触发器等脚本,并在服务器上运行它们(只需右键单击它们)。

对于回滚,通常通过在部署过程开始之前恢复数据库备份来实现。

每个公司的整个过程都有所不同,但这通常是如何完成的。

自动生成模式的ORM对我来说一直都是邪恶的,更不用说几乎不可能用于生产盒了,但我想还有一个选择。

答案 1 :(得分:2)

解决此问题的最简单方法是购买可以通过比较两个数据库更改来检测数据库模式的软件,并生成可以更新目标数据库的更改脚本。我正在使用Visual Studio Ultimate 2010,但也有更便宜的软件可以做同样的事情。 99%的情况下这对我有用(唯一一个对我来说不能正常工作的例子就是当我重命名表格列时)。

如果您没有这样的软件,那么手动生成SQL更改脚本至关重要。每当您对数据库模式进行更改时,请跟踪用于更改的SQL,并将其添加到下一版软件的db架构更改的大文件中。一开始有点乏味,但你会很快习惯它。

然后,当您准备好部署软件时,请按以下步骤操作:

  1. 离线访问网站
  2. 备份当前的生产数据库。
  3. 备份您当前的生产网站。
  4. 将新代码上传到服务器
  5. 运行您之前创建的数据库更改脚本(手动或使用上述软件)
  6. 将网站重新上线,看看是否有效。如果没有,您无法轻松解决问题,请恢复到以前的网站和数据库版本,直到您修复了该错误。
  7. 使用批处理文件和SQL Server代理或SQLCMD可以轻松实现所有这些步骤的自动化。

    通常,您应首先部署到登台服务器,然后非常彻底地测试您的网站,然后再转到生产服务器。这样可以避免生产服务器上的停机时间延长,并最大限度地降低丢失任何重要数据的风险。

答案 2 :(得分:0)

在Red Gate Software,我们正在解决这个问题。请结合SQL Source Control查看我们的SSMS加载项SQL Compare Pro。我们还在研究今年晚些时候推出的“迁移”功能,允许为特定的版本转换定义自定义迁移脚本。由于我们还处于项目的早期阶段,仍有时间give us feedback并帮助我们设计出一个出色的解决方案。我们很乐意与您进一步讨论您的要求!