web-dev-qa-db-fra.com

Obtenez les paramètres de procédure stockée par C # ou SQL?

J'espérais trouver un moyen facile d'obtenir une liste de paramètres de paramètres de procédures stockées. Si la procédure a 3 paramètres, je veux une liste comme celle-ci:

param1
param2
param

Il serait préférable de pouvoir le faire en code C #, mais SQL suffirait également. Des idées?

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

Consultez également cet article pour en savoir plus sur les méthodes https://exploresql.com/2016/10/14/different-methods-to-get-parameter-list-of-a-stored-procedure/

74
Madhivanan

Pour SQL Server, cela devrait fonctionner.

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

Vous pouvez le faire sans jamais toucher à SqlConnection, ce que je trouve être un bonus.

Cela utilise le SqlServer.Management.Smo namespace, vous avez donc besoin d'une référence à Microsoft.SqlServer.ConnectionInfo, Microsoft.SqlServer.Management.Sdk, et Microsoft.SqlServer.Smo dans votre projet.

Utilisez ensuite le code suivant:

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

Si vous êtes familier avec Enterprise Library, il existe une bonne méthode qui permet de DiscoverParameters () , en utilisant Data Access Application Block .

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

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

Quelques liens qui pourraient vous aider:

  1. Méthode DiscoverParameters ;
  2. espace de noms Microsoft.Practices.EnterpriseLibrary.Data .

Les liens ci-dessus se réfèrent à EntLib 3.1. Selon la version de .NET Framework que vous utilisez, vous pouvez également envisager de télécharger la bonne version EntLib pour vous en suivant ce lien .

9
Will Marcouiller