从SQL DB读取架构名称,表名称和列名称并返回到C#代码

我有一个数据库(在SQL Server 2008 SP3中)并且需要C#代码中相关层次结构中的所有模式名称,表名和列名,我有以下SQLElement类:

public class SQLElement { public string SchemaName { get; set; } public string TableName { get; set; } public string ColumnName { get; set; } } 

并有一个列表像:

List SQLElementCollection = new List();

那么如何从DB读取名称并将它们添加到此列表(SQLElementCollection)?

例如假设我们创建一个这样的表:

 Create Table [General].[City] ( [Id] BIGINT NOT NULL IDENTITY(1, 1), [Title] NVARCHAR(30) NOT NULL DEFAULT (N''), [Province_Id] BIGINT NOT NULL ) 

我需要这样的清单:

 [0]={SchemaName="General", TableName="City", ColumnName="Id"} [1]={SchemaName="General", TableName="City", ColumnName="Title"} [2]={SchemaName="General", TableName="City", ColumnName="Province_Id"} 

有没有人对此有任何想法?

编辑:

在下一步中,我们如何获取每列或相关属性的类型?

我建议如果您有更改权限,请在SQLElement包含另一个成员DataType ,或者创建另一个具有属性名称DataType ,然后从SQLElementinheritance,然后将数据类型名称保存到其中供以后使用,并使用下面的查询获取所有信息,谢谢

 SELECT t.name AS TableName, SCHEMA_NAME(t.schema_id) AS SchemaName, c.name AS ColumnName, tp.name as DataType FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID INNER JOIN sys.types tp ON c.system_type_id = tp.system_type_id ORDER BY TableName; 

连接到您的数据库并执行以下语句:

 select * from INFORMATION_SCHEMA.COLUMNS order by TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION; 

检查结果,然后查看并选择您需要的内容。

此查询将为您提供所有列名称和架构名称

 SELECT t.name AS tblName, SCHEMA_NAME(schema_id) AS [schemaName], c.name AS colName FROM sys.tables AS t INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID where SCHEMA_NAME(schema_id) = 'dbo' // you can include this where clause if you want to add additional filter to the result set, like query only tables that belong in particular db schema, or query only tables that starts with particular name (maybe prefix or sufix), etc. ORDER BY tblName; 

你必须执行上面的查询并在列表中取结果

查看数据库中的Information_Schema视图。 这些包含你想要的所有东西。