Obtenir les noms des colonnes d'une table et de les stocker dans une chaîne de caractères ou var c# asp.net
Je me demandais comment je pourrais obtenir le nombre de colonnes d'une table de base de données et de les stocker de chacun d'eux dans une chaîne ou un tableau de chaînes. J'ai le code suivant mais je crois qu'il ne fonctionne pas. Je suis l'aide de la table par défaut qui est donné dans asp.net. J'ai pu écrire sur ce tableau, aucun problème, mais je ne peux pas comprendre comment sélectionner et enregistrer les valeurs récupérées. voici ce que j'ai dans mon code derrière
string connection = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
SqlConnection conn = null;
conn = new SqlConnection(connection);
conn.Open();
using (SqlCommand cmd = new SqlCommand())
{
string query = String.Format("SELECT column_name FROM USER_TAB_COLUMN WHERE table_name = 'TestTable'");
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
columns.Text = cmd.ExecuteNonQuery().ToString();
conn.Close();
}
l'erreur est Invalid object name 'USER_TAB_COLUMN'
. J'ai essayé de l'enlever et ce à l'aide de "SELECT column_name FROM TestTable"
puis il se plaint de column_name
. Colonnes est une zone de texte par la voie.
- Voulez-vous vraiment obtenir les noms de colonnes ou les lignes?
- Je n'ai pas besoin de lignes. Je veux les noms des champs. donc
Table b
a des champsfName lName email Address
je voudrais enregistrer chacun de ces quelque part
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
DbDateReader.GetSchemaTable
.Le nom de colonne dans la première colonne de chaque ligne.
J'aurais juré que j'ai vu
MySqlCommand
etMySqlConnection
. Si vous utilisez SQL-Server comme sgbdr à la place?MySql.Data.MySqlClient.MySqlConnection(connection))
est en train de jeter type ou de l'espace n'a pas pu être trouvé d'erreur. Ai-je raté quelque Système.Les données.(vide) ici?MySqlCommand
etMySqlConnection
. Si vous utilisez SQL-Server comme sgbdr à la place? Puis sinply remplacer toutMySql
avecSql
, il fonctionne exatcly de la même façon. 😉using System.Data.Sql;
MySql
en raison de la balise dans votre question.col.Field<String>("ColumnName")
me récupère les noms de colonne. Je suis en supposant que ce("DataType")
me met le type (int, varchar, etc)?Très Simplement U peut le faire comme le code ci-dessous..
Sauf si vous l'avez défini,
USER_TAB_COLUMN
n'est pas une table ou une vue dans MySQL.Pour obtenir les noms des colonnes, de la requête de la
information_schema.columns
vue.par exemple
pour obtenir une liste de noms de colonnes dans la
foo.bar
table:(Depuis la même table_name peut apparaître dans de multiples bases de données, afin de vous assurer d'obtenir les noms de colonnes d'une table unique, vous devez spécifier la base de données de la table est en. Il permet également d'améliorer l'efficacité de la requête, si vous avez beaucoup de bases de données, car elle limite les bases de données que MySQL a besoin de vérifier.)
À vérifier pour les colonnes d'une table dans le "courant" de la base de données, vous pouvez faire usage de la
DATABASE()
fonction:(Ce serait de la table référencée par
SELECT * FROM bar
à partir de la base de données en cours de connexion.)Since the same table_name can appear in multiple databases, to get the columns in a single table, you'd need to specify the database the table is in.
À moins que la Chaîne de Connexion déjà choisit une base de données particulière.'foo'
avecDATABASE()
. (NOTE: la base de données MySQLDATABASE()
fonction retourne le nom de la base de données actuelle. Ce sera soit la base de données spécifiée sur la connexion, ou la base de données spécifiée dans la dernière (bonne)USE mydatabase
déclaration. C'est la base de données utilisée pour les références non qualifiés par exempleSELECT * FROM foo
) est vraiment une requête de lamydatabase.foo
table, oùmydatabase
est la valeur retournée parSELECT DATABASE()
. HTHJe vais vous montrer comment le faire avec MySQL table de base de données. Similaire de la structure de code peut être utilisé pour votre cas.
Fondamentalement, vous devez exécuter "DESC table_name de la requête". Ensuite, vous avez une description du tableau comme un tableau résultant. Vous pouvez lire dataReader et de récupérer toutes les informations déposées à partir de la Description de la Table. Dans cet exemple, j'ai récupérer les noms de colonne de la spécificité de la table DB. Espérons que cela permettra de sauver quelqu'un à la fois. 🙂 Amusez-vous bien!
En plus de réponses ici est d'une autre manière. Pour moi, il fonctionne plus rapidement (pas beaucoup) que les solutions de rechange avec DataReader. "Là OÙ le FAUX" raconte n'apporter aucune données.
Noter qu'il n'y a pas besoin de parcourir DataTable.Les lignes que le résultat DataTable déjà décrit la table cible du schéma (voir la DataTable.Les colonnes), pas le schéma de l'actuel DataReader résultats