我开发了一个应用程序,用户可以在其中选择要备份的特定表,并将其导出到所选数据库和所选服务器的文本文件中。
我的表单包含网络中可用服务器的列表,在用户选择服务器时,将显示相应的数据库,当用户选择数据库时,将会显示相应的表,用户可以选择他想要备份的表,当输入执行按钮时,它会执行所有备份并导出到文本文件。
现在,当用户选择数据库时,我想稍微修改一下我的程序,如果数据库包含存储过程,它应该显示所选数据库中所有存储过程的列表,并对它们进行备份并导出到文本文件。
请给我一些实现这一目标的想法。
您可以使用SMO名称空间,其中包含执行此操作所需的所有内容以及更多
首先添加对该命名空间的引用
using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.SqlServer.Management.Smo;
Server server = new Server(@[yourServer]);
Database db = server.Databases[yourdatabase];
List<SqlSmoObject> list = new List<SqlSmoObject>();
DataTable dataTable = db.EnumObjects(DatabaseObjectTypes.StoredProcedure);
foreach (DataRow row in dataTable.Rows)
{
string sSchema = (string)row["Schema"];
if (sSchema == "sys" || sSchema == "INFORMATION_SCHEMA")
continue;
StoredProcedure sp = (StoredProcedure)server.GetSmoObject(
new Urn((string)row["Urn"]));
if (!sp.IsSystemObject)
list.Add(sp);
}
Scripter scripter = new Scripter();
scripter.Server = server;
scripter.Options.IncludeHeaders = true;
scripter.Options.SchemaQualify = true;
scripter.Options.ToFileOnly = true;
scripter.Options.FileName = @"C:fileName.sql";
scripter.Script(list.ToArray());
上的更多信息
http://www.sqlteam.com/article/scripting-database-objects-using-smo-updated