有没有办法使用 C# 从 SQL Server 2005 Express 数据库中获取存储过程?我想以相同的方式导出所有这些数据,您可以使用 SQL Server Management Studio 编写脚本,而无需安装 GUI。
我看过一些关于通过 PowerShell 执行操作的引用资料,但最终我真正想要的是 C# 控制台应用程序。
澄清....
我想编写存储过程的脚本。通过 Select * from sys.procedures
获得的列表很有帮助,但最后我需要编写其中的每一个脚本。
最佳答案
您可以为此使用 SMO。首先,将对这些程序集的引用添加到您的项目中:
- Microsoft.SqlServer.ConnectionInfo
- 微软.SqlServer.Smo
- Microsoft.SqlServer.SmoEnum
它们位于 GAC 中(浏览至 C:\WINDOWS\assembly 文件夹)。
使用以下代码作为编写存储过程脚本的示例:
using System;
using System.Collections.Generic;
using System.Data;
using Microsoft.SqlServer.Management.Smo;
class Program
{
static void Main(string[] args)
{
Server server = new Server(@".\SQLEXPRESS");
Database db = server.Databases["Northwind"];
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:\StoredProcedures.sql";
scripter.Script(list.ToArray());
}
}
关于c# - 以编程方式获取所有存储过程的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169330/