2010-06-14 54 views
45

Estaba esperando encontrar una manera fácil de obtener una lista de parámetros de parámetros de procedimientos almacenados. Si el procedimiento tiene 3 Paramaters, quiero una lista como esta:Obtener los parámetros del procedimiento almacenado por C# o SQL?

param1
param2
param3

Sería mejor para ser capaz de hacer esto en C# Código, pero SQL sería suficiente como bien. Ideas?

Respuesta

68
select * from information_schema.parameters 
where specific_name='your_procedure_name' 
+0

Hay muchos métodos para hacer esto en SQL. Consulte esta publicación para conocer más métodos https://madhivanan.wordpress.com/2016/10/14/different-methods-to-get-parameter-list-of-a-stored-procedure/ – Madhivanan

7

Si está familiarizado con Enterprise Library, hay un buen método que permite DiscoverParameters(), usando el Data Access Application Block.

DbCommand command = new DbCommand(); 
command.CommandText = @"myStoredProc"; 
command.CommandType = CommandType.StoredProcedure; 

Database database = new SqlDatabase(myConnectionString); 
database.DiscoverParameters(command); 
// ... 

Algunos enlaces que pueden ayudar:

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

Los enlaces de arriba se refieren a EntLib 3.1. Dependiendo de la versión de .NET Framework que esté utilizando, también puede considerar descargar la versión de EntLib correcta siguiente this link.

49

Para SQL Server esto debería funcionar.

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); 
    } 
} 
+0

En mi caso agregué esto en mi foreach: if (p.ParameterName == "@RETURN_VALUE") continue; –

6

Puede hacerlo sin tener que tocar SqlConnection, lo que me parece una ventaja.

Este utiliza el espacio de nombres SqlServer.Management.Smo, por lo que necesita una referencia a Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.Management.Sdk y Microsoft.SqlServer.Smo en su proyecto.

A continuación, utilice el siguiente código:

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; 
    } 
} 
+0

Encontré estos ensambles aquí: C: \ Archivos de programa \ Microsoft SQL Server \ 100 \ SDK \ Assemblies – Moondustt

Cuestiones relacionadas