2011-09-09 49 views
1

我想创建一个程序,它将使用SQL Server 2008数据库。在第一次启动时,我想打开一个窗口,让用户创建一个数据库。这将是简单的,数据库计算机的名称和IP设置文本框并按钮“开始”。如何以编程方式在C#中创建SQL Server数据库#

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

你能给我一个好的解决方案吗?这是一个很好的编程习惯吗?或者,也许我应该只附加一个SQL脚本?

我做了一些研究,我发现文章:http://www.codeproject.com/KB/tips/CreateSQLDV.aspx

但是,第一个问题,在SQL Server 2008中,没有Microsoft.SqlServer.SmoEnum.dll。所以,当我做类似的“数据创建”窗口,但对于SQL Server 2008(使用可能不同的dll) - 它不适用于SQL Server 2005.并且可能不适用于其他版本的SQL Server 2008?我不知道..从codeproject的例子看起来不错,但我不知道。

我想做一个灵活的程序。

回答

1

我会避免SMO。

它依赖于您的受众群体和您对预期环境的控制权,但附加预制数据库,而方便的选项有时可能会出现问题 - 首先在源代码管理下使用二进制文件,那么您不要在您的源代码管理系统中免费获得差异。另外,您正在附加一个数据库,其中包含某些选项以及可能不适用于特定目标环境的内容 - SQL Server 2005,SQL Server 2008,SQL Server 2008 R2?除此之外,这是一种类似于过去可以部署Access应用程序的有效方法。

在受控制较少的环境中,我会选择生成一个包含所有DDL(以及用于查找表的DML)的SQL脚本,或者提供一个脚本,提供自动运行它并让它们自己运行它的选项用他们自己的工具(如果他们有DBA)。现在

脚本(或至少是对脚本或生成脚本代码模板)是源代码控制之下,并能满足谁愿意来检查它一个DBA。

+0

那么,我的数据库是非常简单的:它有表(一个与图像类型),存储过程,触发器和几个视图。就这样。所以我认为这对于2005年的SQL srever和后者是适当的。 – Marshall

+0

@Marshall:作为一个侧面说明:如果你的SQL Server 2005或更高版本上,你应该不** **使用'IMAGE'再键入 - 使用'VARBINARY(MAX)'代替.... –

+0

@ Marshall不能将SQL Server数据库文件附加到旧版本的SQL Server。因此,如果您的人员使用不同版本的SQL Server,那么您附加的空数据库文件将需要来自您需要支持的最早版本。同样的事情,为您提供的备份文件进行恢复。正如我所说,这是脚本的优势,脚本将在用户环境中运行(并且如果环境是唯一的,它们可以对其进行修改)。问题仍然是目标用户及其环境是什么样子以及他们期望的是什么。 –

2

我会推荐不是以实际编程方式创建数据库。正如你所提到的 - 用不同版本的SMO,这会变成一场噩梦。

我的做法是这样的:

  • 您的安装,船中有您的基本结构(所有表的所有内容)“默认”空数据库也可能在某些表的一些基本查找数据

    当用户表示,他并没有为您的应用现有的数据库中,MDF/LDF /和可能NDF文件复制到SQL Server数据位置

  • 重视这些数据库文件编程到SQL Server实例

这似乎是一个很好的清洁和更灵活的方法。

+0

好了,我不知道(现在)如何MDF和LDF文件附加到SQL Server programmatically.By编程您从C#程序是什么意思?但如果可能的话,我喜欢这个想法。但是要附加这些文件,用户应该将登录名和密码传递给程序(或认证模式),对吧? – Marshall

+0

@Marshall:是 - 肯定 - 以编程方式发出正常的T-SQL语句 - 见http://msdn.microsoft.com/en-us/library/ms165673.aspx了解更多详情! –

+0

所以,我必须连接到主数据库。你认为附加mdf文件比运行“创建脚本”更好吗?这些解决方案的优缺点是什么? – Marshall

1

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

+0

我不知道我是不是真心诚意。你建议询问用户的服务器名称,身份验证和(在SQL服务器身份验证的情况下)登录和passowrd。 然后创建一个连接字符串到“主”数据库。使用master创建我的数据库,表格等等。对不对? – Marshall

+0

让我澄清一下。我所建议的是,你不用在C#代码中以编程方式执行初始数据库管理。服务器名称,sa密码,数据库名称和路径到您的SQL脚本文件,其中包含了数据库/表创建语句:很久以前我使用的是Windows安装程序将调用SQL服务器的命令行实用程序与它所需的所有参数创建一个安装程序。 –

相关问题