Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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# 如何在C中以编程方式创建SQL Server数据库#_C#_Sql Server_Database_Sql Server 2005_Sql Server 2008 - Fatal编程技术网

C# 如何在C中以编程方式创建SQL Server数据库#

C# 如何在C中以编程方式创建SQL Server数据库#,c#,sql-server,database,sql-server-2005,sql-server-2008,C#,Sql Server,Database,Sql Server 2005,Sql Server 2008,我想创建一个程序,它将使用SQLServer2008数据库。在第一次启动期间,我想打开一个窗口,让用户创建一个数据库。这将是简单的,文本框的名称和ip的数据库计算机设置和按钮“去” 程序将在WPF.NET4中。数据库将位于本地网络中 你能给我一个好的解决方案吗?这样做是一种好的编程实践吗?或者我应该附加一个sql脚本 我做了一些研究,我发现这篇文章: 但是,第一个问题是,在SQLServer2008中,没有Microsoft.SqlServer.smoneum.dll。所以,当我执行类似的“数据

我想创建一个程序,它将使用SQLServer2008数据库。在第一次启动期间,我想打开一个窗口,让用户创建一个数据库。这将是简单的,文本框的名称和ip的数据库计算机设置和按钮“去”

程序将在WPF.NET4中。数据库将位于本地网络中

你能给我一个好的解决方案吗?这样做是一种好的编程实践吗?或者我应该附加一个sql脚本

我做了一些研究,我发现这篇文章:

但是,第一个问题是,在SQLServer2008中,没有
Microsoft.SqlServer.smoneum.dll
。所以,当我执行类似的“数据创建”窗口时,但对于SQLServer2008(可能使用不同的DLL),它将不适用于SQLServer2005。并且可能不会与其他版本的SQLServer2008一起工作,以避免?我不知道。。codeproject的例子看起来不错,但我不确定


我想做一个灵活的计划

我建议不要以编程方式实际创建数据库。正如您所提到的,使用不同版本的SMO,这有点像一场噩梦

我的做法是:

  • 在安装过程中,提供一个“默认”空数据库,该数据库包含基本结构(所有表和所有内容)以及某些表中的一些基本查找数据

  • 当用户表示您的应用程序没有现有数据库时,请将MDF/LDF/以及NDF文件复制到SQL Server数据位置

  • 以编程方式将这些数据库文件附加到SQL Server实例


这似乎是一种更干净、更灵活的方法。

我建议不要以编程方式实际创建数据库。正如您所提到的,使用不同版本的SMO,这有点像一场噩梦

我的做法是:

  • 在安装过程中,提供一个“默认”空数据库,该数据库包含基本结构(所有表和所有内容)以及某些表中的一些基本查找数据

  • 当用户表示您的应用程序没有现有数据库时,请将MDF/LDF/以及NDF文件复制到SQL Server数据位置

  • 以编程方式将这些数据库文件附加到SQL Server实例


这似乎是一种更干净、更灵活的方法。

数据库创建本身可能不需要成为代码的一部分。特别是,如果只需要创建一次数据库。我建议您使用Windows installer或Inno安装程序(我更喜欢Inno安装程序)创建安装程序。使用安装程序,您可以提示用户输入其SQL server名称及其管理用户的登录凭据。然后,您可以使用它们运行包含CREATE数据库和CREATE TABLE语句的SQL脚本,等等。希望这有帮助

数据库创建本身可能不需要是代码的一部分。特别是,如果只需要创建一次数据库。我建议您使用Windows installer或Inno安装程序(我更喜欢Inno安装程序)创建安装程序。使用安装程序,您可以提示用户输入其SQL server名称及其管理用户的登录凭据。然后,您可以使用它们运行包含CREATE数据库和CREATE TABLE语句的SQL脚本,等等。希望这有帮助

我会避免SMO

这在很大程度上取决于您的受众和您对预期环境的控制,但是附加预制数据库虽然是一个方便的选项,但有时可能会有问题——首先,它是源代码管理下的二进制文件,因此您无法在源代码管理系统中免费获得差异。此外,您正在附加一个带有某些选项和内容的数据库,这些选项和内容可能不适合特定的目标环境—SQL Server 2005、SQL Server 2008、SQL Server 2008 R2?除此之外,它是一种有效的方法,类似于过去部署Access应用程序的方式

在一个控制较少的环境中,我会生成一个包含所有DDL(以及查找表的DML)的SQL脚本,或者提供一个脚本,提供自动运行该脚本的功能,并让他们可以使用自己的工具(如果他们有DBA)自行运行该脚本

现在,您的脚本(或者至少是脚本的模板或生成脚本的代码)处于源代码管理之下,可以满足希望检查它的DBA的要求。

我会避免SMO

这在很大程度上取决于您的受众和您对预期环境的控制,但是附加预制数据库虽然是一个方便的选项,但有时可能会有问题——首先,它是源代码管理下的二进制文件,因此您无法在源代码管理系统中免费获得差异。此外,您正在附加一个带有某些选项和内容的数据库,这些选项和内容可能不适合特定的目标环境—SQL Server 2005、SQL Server 2008、SQL Server 2008 R2?除此之外,它是一种有效的方法,类似于过去部署Access应用程序的方式

在一个控制较少的环境中,我会生成一个包含所有DDL(以及查找表的DML)的SQL脚本,或者提供一个脚本,提供自动运行该脚本的功能,并让他们可以使用自己的工具(如果他们有DBA)自行运行该脚本


现在,您的脚本(或者至少是脚本的模板或生成脚本的代码)处于源代码管理之下,可以满足希望检查它的DBA的要求。

我不知道是否正确理解。建议向用户询问服务器名称、身份验证以及(如果是sql Server身份验证)登录和密码。然后创建到“主”数据库的连接字符串。使用master创建我的数据