Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用.NET安装和设置数据库?_C#_Sql Server_Installation - Fatal编程技术网

C# 如何使用.NET安装和设置数据库?

C# 如何使用.NET安装和设置数据库?,c#,sql-server,installation,C#,Sql Server,Installation,我目前正在从事一个项目,其中包括SQLServer的使用。我想知道当我安装软件来构建数据库时应该使用什么策略?我需要设置表、存储过程和用户 我的软件是否需要在启动时检查数据库是否存在,如果不存在,则创建数据库? 在安装SQLServer时,是否有任何方法可以自动执行此操作 多谢各位 编辑 好的,现在我有很多很好的解决方案,但我真的在寻找一个免费或开源的解决方案,这将使我能够部署一个新的应用程序,需要新安装SQLServer并根据软件的需要进行设置 所有这些都是通过SQL脚本完成的。然后安装程序在

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

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

多谢各位

编辑
好的,现在我有很多很好的解决方案,但我真的在寻找一个免费或开源的解决方案,这将使我能够部署一个新的应用程序,需要新安装SQLServer并根据软件的需要进行设置

所有这些都是通过SQL脚本完成的。然后安装程序在客户的SQL Server上运行它们。

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

if db_id('dbname') is null
    create database dbname
有关存储过程,请参阅以获取对象类型列表:

if object_id('spname', 'P') is null
    exec ('create procedure dbo.spname as select 1')
go
alter procedure dbo.spname
as
<procedure definition>
这种脚本的好处是,多次运行它们不会产生问题-所有对象都已经存在,因此脚本第二次不会执行任何操作。

软件提供了生成脚本/.exe的选项,以从单个.exe部署整个数据库,包括所有存储过程、表等。如果你能负担得起,并且想有一个简单的方法去做,而不必自己去做,那就是最好的方法-

在整个客户群中轻松推出数据库更新 准确快速地编写脚本并压缩模式和数据 将任何预先存在的SQL脚本打包为.exe,或作为C项目启动 简化SQL Server 2000、2005和2008的部署和更新
您可以像这样使用迁移框架,然后每次应用程序启动时都可以运行迁移。这种方法的好处是,当您发布软件的新版本时,您可以更新数据库

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


我已成功地使用此方法解决了您面临的问题。

如果您使用的是MS SQL server,则设置服务器非常简单。至于创建数据库和表,通常只需执行一次。数据库的全部意义在于数据是持久的,因此,如果数据库不存在的话,您要么遇到了严重的稳定性问题,要么不需要实际的数据库


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

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


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

这是一件很好的事情,我很高兴知道这样的工具存在,但它似乎不支持第一次数据库安装:膨胀,您必须创建代码,检查数据库是否存在,并创建空数据库。之后,您只需将迁移迁移到空白数据库即可。所以在伪代码中:if!DB.Exists DB.Create;迁移。应用;我希望这有帮助。重点是能够第一次自动设置。你是说我应该为第一次使用数据库的用户提供一个工具吗?我应该明确这是用于部署的,在安装之后,我就不必再这样做了,但是每次软件第一次安装时它都应该这样做。所以你是说我应该检查数据库是否存在,如果不存在,运行一个脚本是吗?创建数据库确实需要DBO权限,所以你只能在安装程序中这样做。在安装程序中,即使是连续安装,脚本也可以运行。它不会对已经存在的对象执行任何操作。