我想允許用戶定義一個將被用來獲取一些信息的查詢。用戶連接到的數據庫也是用戶可定義的。基本上,用戶需要執行的步驟是:如何使用DbConnection.GetSchema以不可知的方式確定數據庫列類型?
1 /選擇數據提供者(這是由DbProviderFactories.GetFactoryClasses()返回的提供者之一)
2 /通過在填充配置所選提供者屬性網格綁定到由選定的DbProviderFactory返回的DbConnectionStringBuilder。
3 /選擇一個查詢將操作的表。表的列表來自DbConnection.GetSchema(「表」)(其中DbConnection來自所選的DbProviderFactory)
4 /選擇包含查詢所需數據的列(需要2列)。其中一列必須是文本或整數,另一列必須是數字。
我已經能夠成功地完成前3個步驟,但在步驟4中遇到了問題。最初我連接到了sql server數據庫並使所有工作都正常。現在我已經用oracle XE數據庫嘗試過了,我似乎遇到了問題。
使用的SQLServer2005的數據庫,當我查詢從架構我得到這樣的信息DATA_TYPES:
Type name ProviderDbType DataType
nchar 10 System.String
int 8 System.Int32
,當我再查詢我的表列的模式,我得到:
Column_Name Data_Type
Id nchar
Length int
因此,當試圖將列類型(通過Data_type列值)映射到從DATA_TYPES架構表中鍵入Type_name的系統類型I時。這一切都很好。
然後,我開始使用Oracle(通過ODBC雖然DATA_TYPES信息似乎正是我從柱子後面的查詢是不同的同我得到的是這樣的:。
Column_Name Data_Type Type_Name
Id 8 VARCHAR2
Length 10 int
所以我以前的從DATA_TYPES模式表中鍵入Type_Name並查找Data_Type的值以獲取系統類型的策略不起作用,因爲它使用鍵nchar存儲系統類型,然後嘗試用鍵8查找它。
查看模式中可用的各種東西我看不出我是如何知道列q中的哪一列uery映射到DATA_TYPES模式表中的哪一列。
對於長期問題的道歉,希望問題清楚。
我認爲,該模型應該阻止你做了嗎?我可以確定使用Odbc連接,無論odbc連接設置爲使用哪個驅動程序,這種新格式都將保持一致嗎?如果不是,那麼如果他們選擇了一些我沒有寫出特定代碼的odbc驅動程序會發生什麼? – 2009-07-16 13:40:43