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



我需要使用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无关,所以我没有为它添加标签。

非常感谢您的帮助。

我不知道您的行名是什么意思,但您可以使用信息模式视图获取有关数据库元数据的信息。

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

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

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子句中添加条件。

相关内容

  • 没有找到相关文章

最新更新