【问题标题】:How to install and setup a database with .NET?如何使用 .NET 安装和设置数据库?
【发布时间】:2010-02-20 18:21:54
【问题描述】:

我目前正在从事一个包含使用 SQLServer 的项目。我想知道在安装软件构建数据库时应该使用什么策略?我需要设置表、存储过程和用户​​。

我的软件是否需要在启动时检查数据库是否存在,如果不存在,则创建它? 安装 SQLServer 时有什么方法可以自动执行此操作?

谢谢。

编辑 好的,现在我有很多不错的解决方案,但我真的在寻找一个解决方案(免费或开源会很棒),它可以让我部署一个需要全新安装和设置 SQLServer 的新应用程序以满足软件。

【问题讨论】:

  • 我应该准确地说这是用于部署,并且在安装后,我不必再次执行此操作,但每次首次安装软件时都应该执行此操作。

标签: c# sql-server installation


【解决方案1】:

RedGate 软件提供SQL Packager,它让您可以选择生成一个脚本/.exe 来部署整个数据库,包括从单个 .exe 部署的所有内容(存储过程、表等)。如果您负担得起并希望有简单的方法来做到这一点(不必自己做),那就是要走的路;-)

  • 在您的客户群中轻松推出数据库更新
  • 准确、快速地编写脚本并压缩您的架构和数据
  • 将任何预先存在的 SQL 脚本打包为 .exe,或作为 C# 项目启动
  • 简化 SQL Server 2000、2005 和 2008 的部署和更新

【讨论】:

    【解决方案2】:

    您可以使用像Migrator.Net 这样的迁移框架,然后您可以在每次应用程序启动时运行迁移。这种方法的好处是您可以在发布软件的新版本时更新数据库。

    去看看他们的Getting started 页面。这可能会澄清这个概念。

    我已经成功地使用了这种方法来解决您所面临的问题。

    【讨论】:

    • 这是一件好事,我很高兴知道存在这样的工具,但它似乎不支持首次安装数据库:S
    • 好吧,你必须创建检查数据库是否存在于服务器上的代码,并创建空白数据库。之后,您只需将迁移滚动到空白数据库。所以在伪代码中: if(!DB.Exists) DB.Create(); Migrations.Apply();我希望这会有所帮助。
    【解决方案3】:

    您可以使用 SQL 脚本完成所有这些工作。然后您的安装程序针对客户的 SQL Server 运行它们。

    【讨论】:

      【解决方案4】:

      您可以编写一个仅在对象不存在时创建对象的 T-SQL 脚本。对于数据库:

      if db_id('dbname') is null
          create database dbname
      

      对于存储过程(请参阅MSDN 了解对象类型列表):

      if object_id('spname', 'P') is null
          exec ('create procedure dbo.spname as select 1')
      go
      alter procedure dbo.spname
      as
      <procedure definition>
      

      此类脚本的好处是多次运行它们不会产生问题 - 所有对象都已经存在,因此脚本不会再执行任何操作。

      【讨论】:

      • 所以你是说我应该检查数据库是否存在,如果不存在,运行一个脚本是吗?
      • 创建数据库确实需要 DBO 权限,因此您只能在安装程序中执行此操作。在安装程序中,即使连续安装,脚本也可以运行。它不会对已经存在的对象做任何事情。
      【解决方案5】:

      如果您使用的是 MS SQL Server,那么设置服务器非常简单。至于创建数据库和表,一般只做一次。数据库的全部意义在于数据是持久的,因此,如果数据库有可能不存在,那么您要么 a) 存在重大稳定性问题,要么 b) 不需要实际的数据库。

      设计数据库、表和过程是软件开发过程的一个完整组成部分。当我这样做时,我通常将我所有的创建脚本保存在源代码管理中。创建后,您将以假定数据库已经存在的方式编写程序 - 检查连接性是一回事,但程序永远不应该认为根本没有数据库。

      【讨论】:

      • 重点是第一次可以自动设置。你是说我应该先给“第一次使用的用户”提供一个工具来创建数据库?
      【解决方案6】:

      您可以从数据库中存在的所有对象创建一个脚本。之后,您可以从您的代码中运行此脚本。

      当您在 sql server 中使用脚本向导创建 db 脚本时,在“选择脚本选项”部分中,将“如果不存在则包含”设置为“是”。仅当 db 不存在时才完成这项工作。

      【讨论】:

        猜你喜欢
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 2022-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 1970-01-01
        相关资源
        最近更新 更多