【问题标题】:Get the stored procedure schema获取存储过程架构
【发布时间】:2014-02-24 08:41:06
【问题描述】:

我正在尝试编写一个框架来从现有数据库生成实体。

我已经实现了从表中生成实体的所有代码,并且运行良好。 现在我正在寻找一种解决方案来检索生成存储过程实体所需的所有信息。

这是我用来获取存储过程参数的代码

public static List<StoredProcedureParameter> GetStoredProceduresParameters(SqlConnection connection, string storedProcedureName, bool closeConnection = true)
{
   var query = @"select Parameter_Name, Data_Type, CHARACTER_MAXIMUM_LENGTH 
                 from information_schema.parameters
                 where specific_name = @StoredProcedureName";

   var storedProcedures = new List<string>();

   SqlCommand command = new SqlCommand(query, connection);

   command.Parameters.Add(new SqlParameter("StoredProcedureName", storedProcedureName));

   DataTable dataTable = new DataTable();

   using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
   {
        dataAdapter.Fill(dataTable);
   }

   if (closeConnection)
   {
      connection.Close();
   }

   return DataTableMapper.ReadDataTableList<StoredProcedureParameter>(dataTable);
}

现在我必须检索结果集架构,但我找不到完成此任务的正确方法。有什么建议吗?

注意:所有存储过程总是只返回一个可能的模式,因此任何一个存储过程总是对应一个实体。

【问题讨论】:

  • 没有视图或任何东西可以找出存储过程返回的内容 - 您需要执行它并查看返回的内容,或者您​​需要抓取并解析它的源代码

标签: c# sql sql-server stored-procedures codedom


【解决方案1】:

您好 SimoneL:有一些框架可以为您做到这一点,来自 Microsoft 的 NHibernate 或 EF(实体框架),它们不能满足您的所有需求吗?

EF 入门:http://msdn.microsoft.com/en-gb/data/ee712907#getstarted

【讨论】:

  • 谢谢 yonks,我知道有很多框架具有相同的目标,但我正在开发一个自定义库来提高我的技能和知识。无论如何,我会尝试研究这些框架,也许我能理解它们是如何工作的!
  • 一种方法是查看 EF 的功能,因为您可以打开 .Designer.cs 文件。我查看了我的一个 EF 代码,它似乎映射到基本对象(ObjectContext)并执行了一个函数。这是有道理的,因为您不希望您拥有的每个 StoredProc 都有一个对象。 return base.ExecuteFunction("AuditLogMessageEnd"...) 其中 AuditLogMessageEnd 是我的 SP 的名称。
【解决方案2】:

看我的回答here

当您想知道架构时,您不想调用 SP,因为您可能会影响数据。

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2017-01-18
    • 2022-01-26
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多