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

时间:2011-09-09 14:50:34

标签: c# sql-server database sql-server-2005 sql-server-2008

我想创建一个程序,它将使用SQL Server 2008数据库。在第一次启动时,我想打开一个窗口,让用户创建一个数据库。它将是简单的文本框,其中包含数据库计算机的名称和IP以及按钮“Go”。

程序将在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的例子看起来不错,但我不确定。

我想做一个灵活的计划。

3 个答案:

答案 0 :(得分:2)

我建议以编程方式创建数据库。如你所述 - 使用不同版本的SMO,这会变成一场噩梦。

我的方法是:

  • 使用您的安装,发送一个“默认”空数据库,其中包含您的基本结构(所有表和所有内容),还可能包含某些表中的一些基本查找数据

  • 当用户表明他没有应用程序的现有数据库时,将MDF / LDF /和可能的NDF文件复制到SQL Server数据位置

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我会避免SMO。

这取决于你的观众和你对预期环境的控制,但附加预制数据库,虽然方便的选择,有时可能有问题 - 从它开始是源代码控制下的二进制文件,所以你不要在源代码管理系统中免费获取差异。此外,您附加的数据库包含某些可能不适合特定目标环境的选项和内容 - SQL Server 2005,SQL Server 2008,SQL Server 2008 R2?除此之外,它是一种有效的方法,类似于过去部署Access应用程序的方式。

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

现在,您的脚本(或至少是脚本的模板或生成脚本的代码)受源代码管理,可以满足想要检查它的DBA。