2012-09-04 96 views
2

有沒有什麼辦法可以在c#中檢索oracle架構? 這些都是我所需要的: Tables_Name, 表Columns_Name, 主鍵, 惟一鍵, 外鍵獲取Oracle架構

回答

0

您可以從Oracle中的數據字典表就像您在任何其他表選擇。下面是數據字典表的討論 - Data Dictionary

0

使用DBMS_METADATA包。 例如,爲了獲得CREATE腳本所有的表,你會怎麼做:

SELECT DBMS_METADATA.GET_DDL('TABLE', u.table_name) 
    FROM USER_ALL_TABLES u 

這樣一來,一點點的努力,就可以得到整個架構DDL腳本。 DBMS_METADATA documetation page還有更多的例子。

0

我使用OracleConnection.GetSchema方法。我自己寫了一個幫助方法來檢索每個表格。

private class SchemaInfo 
{ 
    public bool Mandatory { get; set; } 
    public int MaxLength { get; set; } 
} 

private Dictionary<string, SchemaInfo> _getSchemaInfo(OracleConnection _cn, string owner, string tableName) 
{ 
    DataTable _dt = _cn.GetSchema("Columns", new string[3] { owner, tableName, null }); 
    Dictionary<string, SchemaInfo> _dict = new Dictionary<string, SchemaInfo>(); 
    for (int x = 0; x < _dt.Rows.Count; x++) 
    { 
     DataRow _r = _dt.Rows[x]; 
     SchemaInfo _si = new SchemaInfo(); 
     object maxl = _r.ItemArray[10]; 
     if (maxl == DBNull.Value) maxl = -1; 
     _si.Mandatory = (_r.ItemArray[8].ToString().Equals("N")) ? true : false; 
     _si.MaxLength = Convert.ToInt32((maxl ?? 0)); 
     _dict.Add(_r.ItemArray[2].ToString(), _si); 
    } 
    return _dict; 
} 

您將不得不查看返回的其他元素以獲取密鑰等。我非常確定這是可用的(但可能是錯誤的)。

如果您想獲得表格,請使用Connection.GetSchema("Tables", new string[3] { owner, null, null });