Je dois obtenir le type de données d'une colonne en utilisant le nom de la colonne. Je code en C#. La situation est que j'ai une vue qui convertit certaines dates en varchar afin que je puisse mieux les afficher (sans temps pour être exact). Cependant, cela signifie que le type de données pour les colonnes est maintenant incorrect. Ce que je voudrais faire est de rechercher une colonne à partir d'un schéma DataTable en utilisant le nom de la colonne, puis obtenir le type de données de cette colonne. Je rassemblerais le type de données réel de la table principale plutôt que la vue dans ce cas. Des idées?Obtenir le type de données à partir du nom de la colonne
Répondre
La DataTable.Columns
propriété est un DataColumnCollection
, qui peut être indexed by column name pour obtenir un DataColumn
, qui possède une propriété DataType
.
Je ne vois pas comment cela est possible sans inférer le type à partir des valeurs. Si vous avez les résultats de la vue et le nom de la colonne dans le code, les informations sur la table que la vue utilise est perdue à ce point.
Vous pouvez, bien sûr, obtenir les informations sur la table si vous connaissez son nom; qui peut être effectuée soit en utilisant une requête simple comme ça:
SELECT TOP 0 * FROM <<tableName>>
ou en utilisant DMVs:
SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('<<tableName>>')
Dans le premier cas, vous utilisez GetSchemaTable sur le IDataReader et itérer sur les lignes pour trouver votre colonne de nom; Dans le second cas, vous pouvez parcourir le résultat et trouver votre colonne de cette façon.
je peux obtenir la fin du schéma de la table, j'ai juste besoin de connaître le type de données d'une colonne dans ce tableau par nom de colonne. Dites par exemple que j'ai un tableau avec les colonnes Nom, Date de naissance, Âge. Je veux connaître le type de données de la colonne nommée Birthdate. Mais tout ce que j'ai est le schéma de la table et le nom de la colonne. – steventnorris
Dans quel format avez-vous le schéma de la table? –
Il s'agit d'un objet DataTable C# obtenu à l'aide de GetSchemaTable() sur un objet SqlDataReader. – steventnorris
Si vous utilisez SQL Server, vous pouvez utiliser SET FMTONLY. Il renvoie uniquement les métadonnées au client. Il peut être utilisé pour tester le format de la réponse sans réellement lancer la requête.
SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "SET FMTONLY ON; select column from table; SET FMTONLY OFF";
SqlDataReader reader = cmd.ExecuteReader();
SqlDbType type = (SqlDbType)(int)reader.GetSchemaTable().Rows[0]["ProviderType"];
Courtoisie: StackOverflow
INFORMATION_SCHEMA.COLUMNS tableau donne des informations plus claires pour ce que vous avez besoin de sys.columns de table. Vous pouvez essayer ce qui suit:
SELECT data_type, character_maximum_length
FROM information_schema.columns
WHERE table_name = 'tableName' AND column_name = 'columnName'
- 1. Détermination du type de données correct à partir d'un nom
- 2. Comment obtenir un nom de colonne à partir d'un ListView à l'aide de Linq (Type cast)
- 3. C# Obtenir le nom du type dérivé à partir de la classe de base interne Classe
- 4. Obtenir l'instance à partir de StructureMap par type Nom
- 5. Obtenir le type à partir du nom de la classe avec les génériques Java
- 6. Obtenir le nom de la colonne ambigus
- 7. Comment obtenir le nom de la table parent à l'aide du nom de colonne dans Sys.Columns
- 8. Obtenir le nom de la colonne à partir de la feuille de calcul Excel
- 9. Obtenir le nom du schéma (utilisateur) à partir de la base de données
- 10. Comment obtenir le nom du serveur et base de données à partir du fichier de configuration
- 11. Obtenir le nom complet de la classe à partir du nom de la table dans nhibernate
- 12. Obtenir le type de fichier à partir du nom de fichier
- 13. modification du type de données de la colonne générée automatiquement
- 14. Comment obtenir le type générique à partir du type d'objet
- 15. Comment obtenir le nom de la clé de données à partir de l'attribut de données?
- 16. Comment obtenir le nom complet du type?
- 17. Obtenir le nom de l'assemblage à partir de la vue
- 18. Obtenir le nom du package de l'argument de type générique
- 19. Obtenir le nom du thread à partir de processus différents
- 20. C# obtenir le nom du répertoire à partir de DirectoryNotFoundException
- 21. Comment obtenir le type de données de la colonne de la table du jeu de données en C#
- 22. Modification du type de données d'une colonne
- 23. Modification du type de données de la colonne de table
- 24. obtenir l'index de la colonne DataTable avec le nom
- 25. Mootools - comment obtenir la valeur du type d'entrée radio sélectionnée, à partir de son nom
- 26. Obtenir le nom de la base de données à partir de DDL Trigger
- 27. Modifier le type de données de colonne du serveur SQL
- 28. Comment obtenir un objet Type à partir du nom du type?
- 29. Obtenir le nom de la méthode à partir de l'action
- 30. obtenir le nom de la colonne de mysql
Cela fonctionnera-t-il sur un DataTable rassemblé à l'aide de GetSchemaTable() sur un objet SqlDataReader? – steventnorris
GetSchemaTable renvoie un DataTable, donc cela devrait fonctionner. – kol
Eh bien, il semble que la table de schéma ne contient pas les noms de colonnes de la table sql. Chaque ligne représente une colonne de la table sql et les colonnes sont les propriétés (comme le nom de colonne et le type de données), cette méthode ne semble donc pas fonctionner. – steventnorris