我开发了一个应用程序,用户可以选择特定的表来备份并导出到所选数据库和所选服务器的文本文件。
我的表单包含网络中可用的服务器列表,并且将显示服务器对应数据库的用户选择,当用户选择数据库时,将显示相应的表,用户可以选择他想要备份的表,何时进入执行按钮它会进行所有备份并导出到文本文件。
现在我想在用户选择数据库时稍微修改我的程序,如果数据库包含存储过程,它应该显示所选数据库中所有存储过程的列表,并应该对它们进行备份并导出到文本文件。
请给我任何实现这一目标的想法。
答案 0 :(得分:2)
你可以使用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