我想创建一个程序,它将使用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的例子看起来不错,但我不确定。
我想做一个灵活的计划。
答案 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。