如何获取每个表的所有表名以及所有列和行名?

时间:2016-05-02 20:05:40

标签: c# sql database sqlclient

我需要使用C#System.Data.SqlClient dll查询SQL数据库。我知道我通常可以使用像SELECT * FROM TABLE_NAME这样的SQL查询语句来查询数据库。但是,我不知道任何表,列或行名称,所以我不知道如何正确获取我需要的信息。

我在SO上看到的另一个答案后尝试了以下代码:

public void PrintNames() // print table, column, and row names
{
    SqlConnection connection = new SqlConnection(connectionString);
    using (connection)
    {
        connection.Open();

        DataTable table = connection.GetSchema("Tables");
        Debug.Log(table.Columns.Count);
        Debug.Log(table.Rows.Count);

        foreach (DataColumn col in table.Columns)
        {
            foreach (DataRow row in table.Rows)
            {
               Debug.Log(col.ToString() + ", " + row.ToString());
            }
        }
    }
}

这只会导致打印以下内容:TABLE_CATALOG, System.Data.DataRow一遍又一遍。

另外如果你想知道为什么Debug.Log的东西,那是因为我使用的是Unity3D,但这个问题与Unity无关,所以我没有打扰为它添加标签。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我不知道你的意思是什么是行名,但你可以使用Information Schema Views获取有关数据库元数据的信息。

INFORMATION_SCHEMA.TABLES为当前用户拥有权限的当前数据库中的每个表返回一行。

INFORMATION_SCHEMA.COLUMNS为当前用户在当前数据库中可以访问的每一列返回一行。

SELECT TABLE_NAME                        //SELECT ONLY THE NAME OF THE TABLE
FROM INFORMATION_SCHEMA.TABLES           //READ FROM TABLES VIEW
WHERE TABLE_CATALOG='database name'      //KEEP ONLY VALUES OF YOUR DATABASE

获取表格的所有列:

SELECT COLUMN_NAME                      //SELECT ONLY THE NAME OF THE COLUMN
FROM INFORMATION_SCHEMA.COLUMNS         //READ FROM COLUMNS VIEW
WHERE TABLE_CATALOG='database name'     //KEEP ONLY VALUES OF YOUR DATABASE
  AND TABLE_NAME='table name'           //AND A SPECIFIC TABLE

答案 1 :(得分:1)

您可以在SQL Server中使用系统视图:

SELECT t.name AS TableName, c.Name AS ColumnName
FROM sys.tables t
INNER join sys.columns c
  ON t.object_id = c.object_id
ORDER BY t.name, c.column_id

如果要进一步过滤结果,可以在WHERE子句中添加条件。