我需要使用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无关,所以我没有打扰为它添加标签。
非常感谢任何帮助。
答案 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
子句中添加条件。