Ottieni i parametri della stored procedure C # o SQL?

Speravo di trovare un modo semplice per ottenere un elenco di parametri di parametri di stored procedure. Se la procedura ha 3 parametri, voglio una lista come questa:

param1
param2
param3

Sarebbe meglio essere in grado di farlo in C # Code, ma anche SQL sarebbe sufficiente. Idee?

select * from information_schema.parameters where specific_name='your_procedure_name' 

Inoltre, fai riferimento a questo post per conoscere altri metodi https://exploresql.com/2016/10/14/different-methods-to-get-parameter-list-of-a-stored-procedure/

Per SQL Server questo dovrebbe funzionare.

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

Se si ha familiarità con Enterprise Library, esiste un buon metodo che consente di DiscoverParameters () , utilizzando il blocco di applicazioni di accesso ai dati .

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

Alcuni link che potrebbero aiutare:

  1. Metodo DiscoverParameters ;
  2. Spazio dei nomi Microsoft.Practices.EnterpriseLibrary.Data .

I collegamenti sopra riportati si riferiscono a EntLib 3.1. A seconda della versione di .NET Framework che stai utilizzando, potresti anche considerare di scaricare la versione EntLib corretta per te seguendo questo link .

Puoi farlo senza mai toccare SqlConnection, che trovo un bonus.

Questo utilizza lo spazio SqlServer.Management.Smo nomi SqlServer.Management.Smo , quindi è necessario un riferimento a Microsoft.SqlServer.ConnectionInfo , Microsoft.SqlServer.Management.Sdk e Microsoft.SqlServer.Smo nel progetto.

Quindi utilizzare il seguente codice:

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