c# - 以编程方式获取所有存储过程的简单方法

标签 c# sql-server sql-server-2005 stored-procedures

有没有办法使用 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());
   }
}

另请参阅:SQL Server: SMO Scripting Basics .

关于c# - 以编程方式获取所有存储过程的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169330/

相关文章:

c# - Entity Framework 4.0 如何确定实体的工厂方法需要哪些参数?

sql - 从 Access 迁移到 SQL Server

sql - 如何使用 SQL Server 获得正确的时间格式?

sql-server-2005 - 从 SQL 2005 链接服务器执行 DB2 iSeries 存储过程

C# - 正则表达式验证日期和小时

c# - OperationContext 中的 header

c# - 可以让 Python 向 C# 发送一个可变长度的字符串数组吗?

mysql - 在 postgres 的不同列中获取联合的输出

sql-server - 在 T-SQL 中连接来自 XML 的数据

asp.net - 全文搜索最接近的匹配项