我需要使用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
子句中添加条件。