什么是SQL Server类库
SQL Server类库是Microsoft.SqlServer.Management命名空间中的类库,它提供了一些类和方法,用于管理和操作SQL Server。这些类库可以用来创建、删除、修改数据库对象,执行Transact-SQL语句和脚本以及监视和管理SQL Server实例。
使用SQL Server类库执行Transact-SQL语句
要使用SQL Server类库执行Transact-SQL语句,可以使用以下代码:
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
public void ExecuteSql(string connectionString, string sql)
{
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
server.ConnectionContext.ExecuteNonQuery(sql);
}
上面的代码首先创建一个ServerConnection
对象,它表示与SQL Server的连接。然后使用Server
类创建一个SQL Server实例,它是用来管理和操作SQL Server的主要入口。最后使用ExecuteNonQuery
方法在连接上执行指定的Transact-SQL语句。
以下是示例代码,演示如何使用上述方法创建数据库:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
string databaseName = "MyDatabase";
string createDatabaseSql = string.Format("CREATE DATABASE {0}", databaseName);
ExecuteSql(connectionString, createDatabaseSql);
这将在本地SQL Server实例上创建一个名为MyDatabase
的数据库。
使用SQL Server类库创建表和存储过程
使用SQL Server类库创建表和存储过程非常简单。下面是一个示例程序,演示如何使用Table
类创建一个表:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
string databaseName = "MyDatabase";
string tableName = "MyTable";
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
Database database = server.Databases[databaseName];
Table table = new Table(database, tableName);
Column column1 = new Column(table, "ID", DataType.Int);
column1.Identity = true;
column1.IdentitySeed = 1;
column1.IdentityIncrement = 1;
table.Columns.Add(column1);
Column column2 = new Column(table, "Name", DataType.NVarChar(50));
table.Columns.Add(column2);
PrimaryKey primaryKey = new PrimaryKey(table, "PK_MyTable_ID");
primaryKey.Columns.Add(column1);
table.Indexes.Add(primaryKey);
table.Create();
以上代码将在MyDatabase
数据库中创建一个名为MyTable
的表。这个表有两个列,分别是ID
和Name
,其中ID
是自增列。表还创建了一个名为PK_MyTable_ID
的主键索引。
创建存储过程也很简单。下面是示例代码,演示如何使用StoredProcedure
类创建一个简单的存储过程:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
string databaseName = "MyDatabase";
string spName = "MyStoredProcedure";
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
Database database = server.Databases[databaseName];
StoredProcedure sp = new StoredProcedure(database, spName);
sp.TextMode = false;
sp.TextBody = @"
SELECT 'Hello, world!'
";
sp.Create();
以上代码创建了一个名为MyStoredProcedure
的存储过程,它只有一个SELECT
语句,用于返回一个字符串'Hello, world!'
。
使用SQL Server类库管理SQL Server实例
连接到SQL Server实例
使用Server
类可以连接和管理SQL Server实例。使用以下代码可以连接到本地SQL Server实例:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
Console.WriteLine("Connected to {0}", server.Name);
以上代码创建了一个连接到本地SQL Server实例的ServerConnection
对象,然后将它传递给Server
类的构造函数。通过Name
属性可以获取已连接的SQL Server实例的名称。
获取数据库列表
以下代码演示了如何使用Server.Databases
属性来获取SQL Server实例中的数据库列表:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
foreach (Database database in server.Databases)
{
Console.WriteLine(database.Name);
}
以上代码遍历Server.Databases
集合并打印出每个数据库的名称。
获取表和存储过程列表
以下代码演示了如何遍历数据库中的表和存储过程,并打印它们的名称和创建时间:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
string databaseName = "MyDatabase";
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
Database database = server.Databases[databaseName];
foreach (Table table in database.Tables)
{
Console.WriteLine("{0} ({1})", table.Name, table.CreateDate);
}
foreach (StoredProcedure sp in database.StoredProcedures)
{
Console.WriteLine("{0} ({1})", sp.Name, sp.CreateDate);
}
以上代码连接到名为MyDatabase
的数据库,然后遍历表和存储过程并打印它们的名称和创建时间。
备份和还原数据库
以下代码演示了如何使用Backup
和Restore
类备份和还原数据库:
string connectionString = "Data Source=.\\SQLEXPRESS;Integrated Security=True";
string databaseName = "MyDatabase";
string backupPath = "C:\\MyDatabase.bak";
ServerConnection connection = new ServerConnection(new SqlConnection(connectionString));
Server server = new Server(connection);
Database database = server.Databases[databaseName];
Backup backup = new Backup();
backup.Action = BackupActionType.Database;
backup.Database = databaseName;
backup.Devices.AddDevice(backupPath, DeviceType.File);
backup.Initialize = true;
backup.Checksum = true;
backup.ContinueAfterError = true;
backup.PercentCompleteNotification = 10;
backup.Complete += (sender, e) => Console.WriteLine("Backup complete.");
backup.SqlBackup(server);
Restore restore = new Restore();
restore.Devices.AddDevice(backupPath, DeviceType.File);
restore.Database = databaseName;
restore.ReplaceDatabase = true;
restore.PercentCompleteNotification = 10;
restore.Complete += (sender, e) => Console.WriteLine("Restore complete.");
restore.SqlRestore(server);
以上代码备份名为MyDatabase
的数据库到C:\MyDatabase.bak
文件中,并将该数据库还原到同名的数据库中。备份和还原的过程可以分别使用Backup.SqlBackup()
和Restore.SqlRestore()
方法完成。
总结
SQL Server类库提供了一些强大的工具,使开发人员可以轻松地管理和操作SQL Server数据库。通过使用这些类库,开发人员可以轻松创建、删除、修改数据库对象,执行Transact-SQL语句和脚本以及监视和管理SQL Server实例。这些类库是掌握数据处理的必备利器。