這裏的情景:C#:支持多種類型的數據庫表與適配器
我希望能夠同時支持的SQL Server CE和SQL Server使用強類型DataSet 200X數據庫。
我得到的問題是它使用特定類型的連接(SqlConnection或SqlCeConnection)進行編譯,因此我無法在運行時將類型更改爲任何IDbConnection對象。
我是否從Visual Studio生成的數據集要求太多?如果沒有,那麼讓它起作用有什麼竅門?
這裏的情景:C#:支持多種類型的數據庫表與適配器
我希望能夠同時支持的SQL Server CE和SQL Server使用強類型DataSet 200X數據庫。
我得到的問題是它使用特定類型的連接(SqlConnection或SqlCeConnection)進行編譯,因此我無法在運行時將類型更改爲任何IDbConnection對象。
我是否從Visual Studio生成的數據集要求太多?如果沒有,那麼讓它起作用有什麼竅門?
很久以前,我放棄了使用設計器生成的TableAdapters。控制他們所做的事情並不容易,沒有簡單的方法來改變他們所有的連接字符串......當然,沒有辦法讓他們與不同的ADO.NET提供者一起工作,因爲提供者很難實現,在生成的代碼中進行編碼。 TableAdapter甚至不會繼承一個通用的基類,所以你可以編寫通用代碼(當然,它們是從組件繼承而來的,但是這很沒用......)
相反,我使用自己的自制「TableAdapter」生成器。它使用一個DbCommandBuilder
(實際上,由於可以從DataTable
的結構推斷出來,甚至不需要SELECT查詢)來從SELECT查詢構建DbDataAdapter
。對於更復雜的需要特定邏輯的DataTables
,我使它們實現自定義IDataAdapterProvider
,以便它們可以提供自己的DbCommands
。
我想現在是時候畢業了,找到更好的解決方案......缺乏共同的基礎課已經讓我很長時間煩惱了。 – 2009-10-12 20:39:11
TableAdapter被聲明爲partials。你可以在TableAdapters上實現一個接口:) – 2009-12-30 05:40:35
是的,好點...但是它們不能從DbDataAdapter繼承,因爲它們已經從Component繼承 – 2009-12-30 09:21:21