开发者

Invalid Object Name: Beginner using the AdventureWords db from a class

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?


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜