2010-08-25 19 views
1

J'ai essayé de passer le nom du proc dans procedureNamePattern et la procédure semble renvoyer toutes les métadonnées pour toutes les procédures. Je passe dans une chaîne vide et j'obtiens les mêmes résultats.sp_getProcedureColumns

Ce qui suit est le code utilisé:

using (AdsCommand command = new AdsCommand { CommandText = "sp_getProcedureColumns", 
              Connection = connection, 
              CommandType = CommandType.StoredProcedure }) 
{ 
    AdsParameter param = new AdsParameter("@procedureNamePattern", DbType.String) { 
    Direction = ParameterDirection.Input, Value = originalProcedureName }; 
    command.Parameters.Add(param); 

    AdsParameter param0 = new AdsParameter("@catalog", DbType.String) { 
     Direction = ParameterDirection.Input, Value = null }; 
    command.Parameters.Add(param0); 

    AdsParameter param1 = new AdsParameter("@schemaPattern", DbType.String) { 
     Direction = ParameterDirection.Input, Value = null }; 
    command.Parameters.Add(param1); 

    AdsParameter param2 = new AdsParameter("@columnNamePattern", DbType.String) { 
     Direction = ParameterDirection.Input, Value = null }; 
    command.Parameters.Add(param2); 

Répondre

0

Avec les procédures stockées, vous pouvez utiliser la méthode DeriveParameters. Cela pourrait le rendre plus simple. Voici un exemple:

AdsCommand cmd = conn.CreateCommand();  
cmd.CommandText = "sp_getProcedureColumns"; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.DeriveParameters(); 
cmd.Parameters["ProcedureNamePattern"].Value = "MyProcName"; 
AdsDataReader rdr = cmd.ExecuteReader(); 

Si vous ne l'appelez pas la méthode DeriveParameters, l'instruction SQL sous-jacente qui est générée est produite directement à partir des paramètres fournis dans l'ordre donné. Cela signifie que vous devrez fournir les paramètres dans l'ordre pour correspondre à la définition de la procédure. Dans ce cas, le paramètre ProcedureNamePattern doit être 3ème. Si vous modifiez l'ordre des appels cmd.Parameter.Add(), votre exemple original devrait fonctionner.

+0

sp_getProcedureColumns renvoie les métadonnées dont j'ai besoin. Quand je passe le nom du proc, il renvoie toutes les métadonnées pour toutes les procédures. Je veux juste les métadonnées pour la procédure que je passe. – hsedidin

+0

Pourquoi devrais-je utiliser DeriveParameters quand sp_getProcedureColumns est censé renvoyer les métadonnées. Je sais déjà quels sont les paramètres renvoyés par la procédure. Je veux juste qu'il renvoie les paramètres pour le nom de la procédure que je passe. – hsedidin

+0

@ hsedidin, désolé - j'aurais dû répondre plus directement. Je vais le mettre à jour. –