65.9K
CodeProject 正在变化。 阅读更多。
Home

以编程方式创建 SQL 数据库

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.49/5 (18投票s)

2008年2月22日

CPOL

2分钟阅读

viewsIcon

107074

downloadIcon

4169

在本文中,我将解释如何使用 Microsoft SQL Management Objects (SMO) 从 C# 代码创建 Microsoft SQL 数据库。

引言

在本文中,我将解释如何使用 Microsoft SQL Management Objects (SMO) 从 C# 代码创建 Microsoft SQL 数据库。在此示例中,我将

  1. 枚举网络中的所有 SQL 服务器,并将一个列表框填满,用户可以在其中选择一个服务器。
  2. 用户将输入要创建的数据库名称。
  3. 用户将输入一个 AD 帐户以授予权限。
  4. 当用户单击“创建数据库”时,系统将检查数据库是否存在。

背景

SQL Server Management Objects (SMO) 是用于以编程方式管理 Microsoft SQL Server 的对象。您可以使用 SMO 来构建自定义的 SQL Server 管理应用程序。尽管 SQL Server Management Studio 是一个功能强大且广泛的 SQL Server 管理应用程序,但有时使用 SMO 应用程序可能会更好地满足您的需求。

枚举 SQL 服务器

SmoApplication.EnumAvailableSqlServers() 枚举 Microsoft SQL Server 可用实例的列表。它返回一个 DataTable 对象值,其中包含有关可用 SQL Server 实例的信息的枚举列表。该表描述了返回的 DataTable 的不同列。

Column 数据类型 描述
名称 字符串 安装了 SQL Server 实例的服务器名称。
服务器 字符串 安装了 SQL Server 实例的服务器名称。
实例 字符串 SQL Server 实例。
IsClustered 布尔值 一个布尔值,如果实例参与故障转移群集,则为 true,否则为 false
版本 字符串 SQL Server 实例的版本。
IsLocal 布尔值 一个布尔值,如果实例是本地的,则为 true,否则为 false
DataTable dt = SmoApplication.EnumAvailableSqlServers();
foreach (DataRow dr in dt.Rows)
{ 
this.cbServers.Items.Add(dr[0]);
} 

连接到 SQL Server

首先,我们检查用户选择的是本地服务器还是 SQL 服务器

//Connect to the local, default instance of SQL Server.
string srvname = this.cbServers.SelectedItem as string;
Server srv;
if (srvname == null)
{
    srv = new Server();
    sb.AppendLine("Connected to local SQL server");
}
else 
{
    srv = new Server(srvname);
    sb.AppendLine(string.Format("Connected to {0}", srvname));
}

检查数据库是否存在

检查数据库是否已存在很容易,只需使用服务器的 Databases 属性,如下所示:

//Define a Database object variable by supplying the server and the 
//database name arguments in the constructor. 
Database db = srv.Databases[this.tbDBName.Text.Trim()];
if (db != null)
{
    if (MessageBox.Show(string.Format
	("The '{0}' already exists do you want to drop it?", this.tbDBName.Text), 
	"Warning", MessageBoxButtons.YesNo, 
	MessageBoxIcon.Question) == DialogResult.Yes)else 
    {
        if (MessageBox.Show(string.Format
	("Create the Tables and Stored Procedures for BT Error Manager on '{0}'?", 
	this.tbDBName.Text), "Warning", MessageBoxButtons.YesNo, 
	MessageBoxIcon.Question) == DialogResult.Yes)
        {
            b.AppendLine("Creating the Tables and Stored Procedures.");
            this.tbProgress.Text = sb.ToString();
            db.ExecuteNonQuery(dbstring);
            sb.AppendLine(string.Format
	   ("Created the Tables and Stored Procedures for BT Error Manager on '{0}'", 
	   this.tbDBName.Text));this.tbProgress.Text = sb.ToString();
	   this.tbProgress.ScrollToCaret();"Proceed or select another database");
	   this.tbProgress.Text = sb.ToString();this.tbProgress.ScrollToCaret();
            return; 

创建数据库

要创建数据库,您只需创建一个带有服务器和数据库名称的新 Database 对象,然后调用 Create 方法。

db = new Database(srv, this.tbDBName.Text);
this.tbProgress.Text = sb.ToString();
this.tbProgress.ScrollToCaret();
//Create the database on the instance of SQL Server. 
db.Create();
sb.AppendLine("Created the database.");
sb.AppendLine("Creating the Tables and Stored Procedures.");
this.tbProgress.Text = sb.ToString();this.tbProgress.ScrollToCaret(); 

运行 SQL 脚本

最后一步是运行脚本,该脚本将创建表、视图、存储过程等。

//'Reference the database and display the date when it was created. 
db.ExecuteNonQuery(dbstring);

注释

如果您想在项目中使用此代码,您需要添加对 SMO 程序集的引用。您可以在 C:\Program Files\Microsoft SQL Server\90\SDK\Assemblies 文件夹中找到 SMO 程序集。选择以下文件:

  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SqlEnum.dll
  • Microsoft.SqlServer.SmoEnum.dll
}
sb.AppendLine(
}
}
{
    db.Drop();
}

历史

访问 www.MoustafaRefaat.com 了解更多信息。

© . All rights reserved.