51 votes

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

J'espérais trouver un moyen simple 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
param3

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

75voto

Madhivanan Points 5402
select * from information_schema.parameters
where specific_name='your_procedure_name'

62voto

Robaticus Points 14665

Pour SQL Server, cela devrait fonctionner.

 private void ListParms()
{
    SqlConnection conn = new SqlConnection("my sql command 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);
    }


}
 

10voto

gunr2171 Points 4327

Bien que je sois TRÈS en retard à la fête, je veux simplement partager ce que j’ai trouvé pour résoudre ce problème sans jamais toucher à SqlConnection.

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

Ensuite, utilisez 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;
    }
}
 

9voto

Will Marcouiller Points 11649

Si vous êtes familier avec l'Entreprise, de la Bibliothèque, il y a une bonne méthode qui permet de DiscoverParameters(), à l'aide de l' Application d'Accès aux Données du Bloc.

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. DiscoverParameters Méthode;
  2. Microsoft.Les pratiques.EnterpriseLibrary.Les Données De L'Espace De Noms.

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

4voto

Tom H. Points 23783

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X