【问题标题】:Get stored procedure parameters by either C# or SQL?通过 C# 或 SQL 获取存储过程参数?
【发布时间】:2011-03-03 13:47:44
【问题描述】:

我希望找到一种简单的方法来获取存储过程参数的参数列表。如果程序有 3 个参数,我想要一个这样的列表:

参数1
参数2
参数3

最好能够在 C# 代码中执行此操作,但 SQL 也足够了。想法?

【问题讨论】:

    标签: c# sql sql-server-2008 stored-procedures parameters


    【解决方案1】:

    如果您熟悉企业库,有一个很好的方法允许使用DiscoverParameters(),使用Data Access Application Block

    DbCommand command = new DbCommand();
    command.CommandText = @"myStoredProc";
    command.CommandType = CommandType.StoredProcedure;
    
    Database database = new SqlDatabase(myConnectionString);
    database.DiscoverParameters(command);
    // ...
    

    一些可能有帮助的链接:

    1. DiscoverParameters Method;
    2. Microsoft.Practices.EnterpriseLibrary.Data Namespace

    以上链接是指EntLib 3.1。根据您使用的 .NET Framework 版本,您还可以考虑按照 this link 为您下载正确的 EntLib 版本。

    【讨论】:

      【解决方案2】:
      select * from information_schema.parameters
      where specific_name='your_procedure_name'
      

      也可以参考这篇文章了解更多方法 https://exploresql.com/2016/10/14/different-methods-to-get-parameter-list-of-a-stored-procedure/

      【讨论】:

        【解决方案3】:

        对于 SQL Server,这应该可以工作。

        private void ListParms()
        {
            SqlConnection conn = new SqlConnection("my sql connection string");
            SqlCommand cmd = new SqlCommand("proc name", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();
            SqlCommandBuilder.DeriveParameters(cmd);
            foreach (SqlParameter p in cmd.Parameters)
            {
               Console.WriteLine(p.ParameterName);
            }
        }
        

        【讨论】:

        • 就我而言,我在 foreach 中添加了这个: if (p.ParameterName == "@RETURN_VALUE") continue;
        【解决方案4】:

        您无需接触 SqlConnection 就可以做到这一点,我认为这是一个好处。

        这使用SqlServer.Management.Smo 命名空间,因此您需要在项目中引用Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.Management.SdkMicrosoft.SqlServer.Smo

        然后使用以下代码:

        Server srv = new Server("serverNameHere");
        srv.ConnectionContext.AutoDisconnectMode = AutoDisconnectMode.NoAutoDisconnect;
        srv.ConnectionContext.LoginSecure = false; //if using username/password
        srv.ConnectionContext.Login = "username";
        srv.ConnectionContext.Password = "password";
        srv.ConnectionContext.Connect();
        
        Database db = srv.Databases["databaseNameHere"];
        
        foreach(StoredProcedure sp in db.StoredProcedures)
        {
            foreach(var param in sp.Parameters)
            {
                string paramName = param.Name;
                var dataType = param.DataType;
                object defaultValue = param.DefaultValue;
            }
        }
        

        【讨论】:

        • 我在这里找到了这些程序集:C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies
        猜你喜欢
        • 2014-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-25
        • 2018-09-18
        相关资源
        最近更新 更多