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 ?