2009-05-15 9 views
2

J'utilise Oracle Express Edition et je veux obtenir des informations de table (nom de colonne, type, taille, etc.) par programme, dans mon programme (.Net C#, connecteur Microsoft oracle).décrire requête avec oracle (.Net Connector)

Dans SqlPlus, quand je donne la commande "desc < nom de table >" il fonctionne parfaitement et imprime toutes les informations sur la table.

Maintenant, je veux le faire par programmation. J'ai essayé de donner la requête "desc < nom de table >" mais il a échoué. Alors je lu quelque part que desc est une procédure stockée et nous devons l'appeler comme une procédure stockée, puis je l'ai essayé code suivant, son échec avec l'erreur,

code 1

private OracleDataReader OracleDescribe(string tablename) 
{ 
    OracleCommand cmd = new OracleCommand("describe " + tablename, OracleConn); 
    return cmd.ExecuteReader(); 
} 

Erreur 1

Invalid SQL Statement 

code 2

private OracleDataReader OracleDescribe(string tablename) 
{ 
    OracleCommand cmd = new OracleCommand("describe", OracleConn); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.Add("table", OracleType.VarChar).Value = tablename; 
    return cmd.ExecuteReader(); 
} 

erreur 2

Encountered the symbol ">" when expecting one of the following: (

Répondre

3

Utilisez une requête sur les vues/tables de métadonnées du système. .: par exemple

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, 
     DATA_PRECISION, DATA_SCALE, NULLABLE, DATA_DEFAULT, CHAR_LENGTH 
FROM ALL_TAB_COLUMNS 
WHERE OWNER='SCOTT' AND TABLE_NAME IN ('EMP', 'DEPT') 
ORDER BY TABLE_NAME ASC, COLUMN_ID ASC 

Vous pouvez également regarder dans la méthode GetSchema sur DbConnection, (si vous utilisez .NET 2.0 ou supérieur, recommandé), et vérifier les points de vue spécifiques définis dans le MSDN.