views:

259

answers:

1

I'm trying to learn some C#.net. I'm just trying to expose the AdventureWorks database included in my C# class via a web interface. Here's the setup:

I've got a DropDownList in on my ASPX page with an id of tableNameDropDown. It gets populated on Page_Load like this:

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;
    }

And that works just fine, I get a nice long list of the tables in the DB. When someone selects a table from the list, I want to display that table in a GridView control with an id of grid. This is what I've got:

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;
    }

When I debug the page, I get an error on the adapter.Fill(dataSet, tableName); line: SqlException: Inlvalid object name '{tableName}'.

The tables in the DB are the following:

dbo.AWBuildVersion
.... more dbo. tables

HumanResources.Department
HumanResources.Employee
.... more HumanResources tables

Person.Address
Person.AddressType
.... more Person tables

... Other prefixes are "Pdoduction, Purchasing, Sales"

There are probably ~50+ tables, and I get all their names (without the prefixes) into my DropDownList no problem, but I can't seem to query them.

Any ideas?

+1  A: 

You've already answered yourself: you need to use also the prefix in the select statement you're executing, like

Select * From Person.Address

Beside that you should not use the sysobject tables, from SQL Server 2005 you have system views that helps you, so you can write a better statement to select tables:

select * From INFORMATION_SCHEMA.TABLES

Check also this article.

Regards Massimo

massimogentilini
Is there a way to programmatically get the table prefix along with the table in my DropDownList? Then I'd be able to turn around and use it in the query.
saturdayplace