是否可以从 SQL 服务器获取数据表列表?
Is it possible to get a list of DataTables from SQL Server?
我正在尝试从我的 SQL 服务器数据库中获取 table 的列表。我想要 DataTable
对象而不仅仅是 name
.
到目前为止我有:
using (SqlConnection connection = new SqlConnection(Settings.Default.DatabaseString))
{
List<DataTable> tables = new List<DataTable>();
connection.Open();
}
我可以使用以下方式获取 table 的名称:
DataTable schema = connection.GetSchema("Tables");
foreach (DataRow row in schema.Rows)
{
var name = row[2].ToString();
}
但我想要更多信息,而不仅仅是 table 我想要 return 主键和外键等。这可能吗?
SQL 服务器非常开放querying the catalog。您可以轻松创建将 return 所需数据的查询。
存在多个表格可以帮助您:
SELECT * FROM sys.tables
SELECT * FROM sys.columns
SELECT * FROM sys.indexes
SELECT * FROM sys.objects o WHERE o.type IN ('PK', 'F')
可以使用系统方法 OBJECT_NAME
.
从任何这些表中查询对象的名称
您可以使用 Conenction.GetSchema
重载获取有关数据库、表、列和索引的信息:
using (var con = new SqlConnection(Settings.Default.DatabaseString))
{
con.Open();
DataTable tables = con.GetSchema("Tables");
foreach (DataRow tableRow in tables.Rows)
{
String database = tableRow.Field<String>("TABLE_CATALOG");
String schema = tableRow.Field<String>("TABLE_SCHEMA");
String tableName = tableRow.Field<String>("TABLE_NAME");
String tableType = tableRow.Field<String>("TABLE_TYPE");
DataTable columns = con.GetSchema("Columns", new[] { database, null, tableName });
foreach (DataRow col in columns.Rows)
{
Console.WriteLine(string.Join(",",col.ItemArray));
}
DataTable indexes = con.GetSchema("Indexes", new[] { database, null, tableName });
foreach (DataRow index in indexes.Rows)
{
Console.WriteLine(string.Join(",", index.ItemArray));
}
DataTable indexColumns = con.GetSchema("IndexColumns", new[] { database, null, tableName });
foreach (DataRow indexCol in indexColumns.Rows)
{
Console.WriteLine(string.Join(",", indexCol.ItemArray));
}
}
}
这是 GetSchema
的可能值列表:
https://msdn.microsoft.com/en-us/library/cc716722(v=vs.110).aspx
我正在尝试从我的 SQL 服务器数据库中获取 table 的列表。我想要 DataTable
对象而不仅仅是 name
.
到目前为止我有:
using (SqlConnection connection = new SqlConnection(Settings.Default.DatabaseString))
{
List<DataTable> tables = new List<DataTable>();
connection.Open();
}
我可以使用以下方式获取 table 的名称:
DataTable schema = connection.GetSchema("Tables");
foreach (DataRow row in schema.Rows)
{
var name = row[2].ToString();
}
但我想要更多信息,而不仅仅是 table 我想要 return 主键和外键等。这可能吗?
SQL 服务器非常开放querying the catalog。您可以轻松创建将 return 所需数据的查询。
存在多个表格可以帮助您:
SELECT * FROM sys.tables
SELECT * FROM sys.columns
SELECT * FROM sys.indexes
SELECT * FROM sys.objects o WHERE o.type IN ('PK', 'F')
可以使用系统方法 OBJECT_NAME
.
您可以使用 Conenction.GetSchema
重载获取有关数据库、表、列和索引的信息:
using (var con = new SqlConnection(Settings.Default.DatabaseString))
{
con.Open();
DataTable tables = con.GetSchema("Tables");
foreach (DataRow tableRow in tables.Rows)
{
String database = tableRow.Field<String>("TABLE_CATALOG");
String schema = tableRow.Field<String>("TABLE_SCHEMA");
String tableName = tableRow.Field<String>("TABLE_NAME");
String tableType = tableRow.Field<String>("TABLE_TYPE");
DataTable columns = con.GetSchema("Columns", new[] { database, null, tableName });
foreach (DataRow col in columns.Rows)
{
Console.WriteLine(string.Join(",",col.ItemArray));
}
DataTable indexes = con.GetSchema("Indexes", new[] { database, null, tableName });
foreach (DataRow index in indexes.Rows)
{
Console.WriteLine(string.Join(",", index.ItemArray));
}
DataTable indexColumns = con.GetSchema("IndexColumns", new[] { database, null, tableName });
foreach (DataRow indexCol in indexColumns.Rows)
{
Console.WriteLine(string.Join(",", indexCol.ItemArray));
}
}
}
这是 GetSchema
的可能值列表:
https://msdn.microsoft.com/en-us/library/cc716722(v=vs.110).aspx