2011-12-11 55 views
3

我有一個數據庫(在SQL Server 2008 SP3中)並且需要C#代碼中相關層次結構中的所有架構名稱,表名稱和列名稱,我有SQLElement類別如下:閱讀架構名稱,表名稱和列名從一個SQL數據庫返回到C#代碼

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

,並具有列表一樣:

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

因此,如何我可以從數據庫讀取名稱,並將它們添加到這個列表(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"} 

任何人不會對此有任何想法?

編輯:

在下一步中,我們如何才能讓每列或相關屬性的類型?

回答

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; 
0

查看您的數據庫中的Information_Schema視圖。這些都有你想要的東西。

2

連接到數據庫,並執行以下語句:

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

檢查結果,然後偷看,然後選擇你所需要的。

1

該查詢會給你所有的列名和模式名

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; 

,你必須執行上面的查詢,並採取在列表結果