2012-03-05 25 views
0

需要知道數據庫的確切信息並使用c#包含表。 數據庫是MS訪問。我想要在其中的表的完整信息,如主鍵,最大長度,非空ms的訪問數據庫中的表中的列,等等。 所以最好的辦法是......我想知道c#中ms access數據庫表列的確切數據類型(dbtype)

先進thanx任何形式的幫助。

另一個問題是的getSchema使我的數據類型像130,131數字方式.. 所以我怎樣才能使用它們創建表查詢他們放棄錯誤

讓我解釋什麼,我試圖做,我希望重建關於我沒有信息的數據庫。我不知道它的大小,表格,數據或任何事情。 實際上我已經成功了一個程度。我做了什麼是我得到的數據庫名稱和創建與CatalogClass和getschema(表)我得到所有的表名稱,並創建它們與C#創建表。然後列名alter table.and現在我必須給它提供的數據庫中的約束。 這樣,其他則此方法我用的是有沒有別的東西,我可以很容易missing.any或更好的方法來做到this.so,它可以走得更快

問題仍然是開放的

+0

我相信你可以使用DAO使用C#,[所以這裏是一個後(http://stackoverflow.com/questions/698839/how-以提取使用VBA創建模式,這可能有所幫助,以提取模式的訪問mdb數據庫/ 699516#699516)。 – Fionnuala 2012-03-05 10:26:55

+0

THANX for remou ...但我對所有這些特別從未學過的VBA新手,目前正在C#上工作。我使用ADO動態創建數據庫,表和columns.everything是工作,但我只需要約束,鑰匙,確切的數據類型添加到對此我recreating.and這些信息我已經從其他數據庫採取列.. – vishal 2012-03-06 04:43:55

+0

,所以我思考是否有任何其他簡單的方法來獲取信息和implement。當getschema給我的數據類型的列,他們是數字形式如130,5,131.so有一種方法,可以給我數字,字符串,日期時間... – vishal 2012-03-06 04:45:51

回答

1

我相信在下面的鏈接中都記錄了所有內容,嘗試通過調試一步一步地運行它,然後您可以檢查該元素並顯示您想要的每個值。

http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx

主鍵: DataTable.PrimaryKey 最大長度,是什麼?記錄?數據表。行數。 列? DataTable.Columns.Rows

+0

這是關於數據表。我有一個MS訪問數據庫,並希望在其他位置重新創建它,並使用完全相同的約束和密鑰以及數據。所以我需要數據庫的所有信息,所以我可以動態創建它與所有的關鍵和約束。 – vishal 2012-03-05 08:24:20

+0

好吧,所以如果我理解正確,U需要知道每列的數據類型(例如),你可以從DataTable.Columns獲取它 - 即表的Columns的集合,然後您可以從DataColumn.DataType獲取每行的信息。希望它有助於 – 2012-03-05 08:56:22

+0

謝謝,但它給了我像system.int32和所有這些系統類型。 – vishal 2012-03-05 09:01:37

0

看來您正在使用模式來返回字段類型。我一直在測試,而這些線上的東西似乎會返回你想要的。

ADODB.Connection cn = new ADODB.Connection(); 
ADODB.Recordset rs = new ADODB.Recordset(); 
string cnStr; 

cnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\\Docs\\Test.accdb"; 
string ssql = "Select * From Table1 where 1=2"; 

cn.Open(cnStr, null, null, 0); 

rs.Open(ssql, cn, ADODB.CursorTypeEnum.adOpenKeyset, 
    ADODB.LockTypeEnum.adLockOptimistic, -1); 

foreach (ADODB.Field fld in rs.Fields) 
{ 
    Console.WriteLine(fld.Type); 
} 
Console.Read(); 

rs.Close(); 
cn.Close(); 

對於各種類型這將返回:

adInteger 
adVarWChar = Text 
adDate 
adInteger 
adLongVarWChar = Memo 
adVarWChar 
adDate 
adBoolean 
+0

我會試試這個code.but,我已經解釋了這個問題bit.kindly看看。 – vishal 2012-03-09 03:48:19

+0

vishal,迄今爲止,重新創建Access數據庫的最佳方法是複製它。訪問是基於文件的。之後使用DAO,或DAO和ADO的混合物。將返回正確的字段類型,您可以檢查超鏈接字段,字段格式,查找表,字段複選框以及許多其他您無法找到的其他內容。正如我之前所說,您可以使用C#使用DAO。 Access不僅僅是一個數據庫,事實上,它根本不是一個數據庫,它通常是一個RAD工具,但並不總是使用Jet/ACE數據庫。 – Fionnuala 2012-03-09 09:15:10

+0

訪問是在其他地方的客戶端,我在服務器端,所以複製不是我想的方式。上傳需要太多的時間,因爲數據太多。 – vishal 2012-03-09 09:56:40