检索表名称

时间:2015-11-18 15:32:09

标签: c# sql-server

我正在尝试从我正在使用的本地数据库中检索表的名称。

这是我尝试的代码,但它从未经历过foreach循环:

public void GetColumnNames()
    {
        SqlConnection con;
        SqlDataAdapter adapter = new SqlDataAdapter();
        DataSet ds = new DataSet();

        con = new SqlConnection(Properties.Settings.Default.AlhusainSoundDBConnectionString);

        List<string> colns = new List<string>();

            try
        {
            con.Open();
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
        }

        foreach (DataTable dt in ds.Tables)
            {
                colns.Add(dt.TableName);
                Console.WriteLine(dt.TableName);
            }
    }

所以有人可以建议我如何正确地做到这一点

此致

2 个答案:

答案 0 :(得分:1)

要获取表名,您需要使用INFORMATION_SCHEMA

USE <your_database_name>
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES

答案 1 :(得分:1)

除了打开与数据库的连接之外,您还没有做任何事情。您的数据集尚未填充任何数据。我的方法是使用SqlCommand对象执行以下SQL语句并填充SqlDataReader

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

因此,C#代码可能如下所示:

string sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES";

using (SqlConnection con = new SqlConnection(Properties.Settings.Default.AlhusainSoundDBConnectionString))
using (SqlCommand cmd = new SqlCommand(sql, con))
{
    con.Open();
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
        while (dr.Read())
        {
            // do something with each table
            string tableName= dr["TABLE_NAME"].ToString();
            // OR
            // string tableName = dr[0].ToString();
            // OR
            // string tableName = dr.GetString(0);
        }
    }
}