0 votes

Nom d'objet invalide : Débutant utilisant la base de données AdventureWords dans une classe

Je suis en train d'essayer d'apprendre un peu de C#.net. Je suis en train d'essayer d'exposer la base de données AdventureWorks incluse dans ma classe C# via une interface web. Voici la configuration :

J'ai un DropDownList sur ma page ASPX avec un id de tableNameDropDown. Il est rempli sur Page_Load comme ceci :

protected void Page_Load(object sender, EventArgs e)
    {
        conn.Open();

        String table_names_sql = "select Name from sysobjects where type='u' ORDER BY name";
        SqlCommand cmd = new SqlCommand(table_names_sql, conn);
        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {

            tableNameDropDown.Items.Add(reader[0].ToString());
        }

        conn.Close();

        tableNameDropDown.AutoPostBack = true;
    }

Et ça fonctionne très bien, j'obtiens une longue liste agréable des tables dans la base de données. Quand quelqu'un sélectionne une table de la liste, je veux afficher cette table dans un contrôle GridView avec un id de grid. Voici ce que j'ai :

protected void tableNameDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataSet dataSet = new DataSet();

        String tableName = columnNameDropDown.SelectedItem.ToString();
        String table_sql = String.Format("SELECT * FROM {0};", tableName);
        SqlDataAdapter adapter = new SqlDataAdapter(table_sql, conn);
        adapter.Fill(dataSet, tableName);

        grid.DataSource = dataSet;
        grid.DataMember = tableName;
    }

Quand je débogue la page, j'obtiens une erreur sur la ligne adapter.Fill(dataSet, tableName); : SqlException: Nom d'objet invalide '{tableName}'.

Les tables dans la base de données sont les suivantes :

dbo.AWBuildVersion
... plus de tables dbo.

HumanResources.Department
HumanResources.Employee
... plus de tables HumanResources

Person.Address
Person.AddressType
... plus de tables Person

... Autres préfixes sont "Production, Achats, Ventes"

Il y a probablement ~50+ tables, et j'obtiens tous leurs noms (sans les préfixes) dans mon DropDownList sans problème, mais je n'arrive pas à les interroger.

Des idées ?

1voto

massimogentilini Points 2018

Vous avez déjà répondu vous-même : vous devez également utiliser le préfixe dans l'instruction select que vous exécutez, comme

Sélectionner * De Personne.Adresse

En plus de cela, vous ne devez pas utiliser les tables sysobject, à partir de SQL Server 2005 vous avez des vues système qui vous aident, donc vous pouvez écrire une meilleure instruction pour sélectionner les tables :

Sélectionner * De INFORMATION_SCHEMA.TABLES

Vérifiez aussi cet article.

Cordialement Massimo

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