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

Sae*_*eid 3 c# sql t-sql sql-server

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

 public class SQLElement
{
    public string SchemaName { get; set; }
    public string TableName { get; set; }
    public string ColumnName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并有一个列表像:

List<SQLElement> SQLElementCollection = new List<SQLElement>();

那么如何从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
)
Run Code Online (Sandbox Code Playgroud)

我需要这样的清单:

[0]={SchemaName="General", TableName="City", ColumnName="Id"} 
[1]={SchemaName="General", TableName="City", ColumnName="Title"} 
[2]={SchemaName="General", TableName="City", ColumnName="Province_Id"} 
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

Eli*_*ain 6

我的建议是DataTypeSQLElement你有更改权限的情况下包含另一个成员,或者创建另一个具有属性名称的类DataType然后继承SQLElement,然后将数据类型名称保存到其中供以后使用,并使用下面的查询获取所有信息,谢谢

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;
Run Code Online (Sandbox Code Playgroud)