2009-10-12 55 views
0

這裏的情景:C#:支持多種類型的數據庫表與適配器

我希望能夠同時支持的SQL Server CE和SQL Server使用強類型DataSet 200X數據庫。

我得到的問題是它使用特定類型的連接(SqlConnection或SqlCeConnection)進行編譯,因此我無法在運行時將類型更改爲任何IDbConnection對象。

我是否從Visual Studio生成的數據集要求太多?如果沒有,那麼讓它起作用有什麼竅門?

回答

1

很久以前,我放棄了使用設計器生成的TableAdapters。控制他們所做的事情並不容易,沒有簡單的方法來改變他們所有的連接字符串......當然,沒有辦法讓他們與不同的ADO.NET提供者一起工作,因爲提供者很難實現,在生成的代碼中進行編碼。 TableAdapter甚至不會繼承一個通用的基類,所以你可以編寫通用代碼(當然,它們是從組件繼承而來的,但是這很沒用......)

相反,我使用自己的自制「TableAdapter」生成器。它使用一個DbCommandBuilder(實際上,由於可以從DataTable的結構推斷出來,甚至不需要SELECT查詢)來從SELECT查詢構建DbDataAdapter。對於更復雜的需要特定邏輯的DataTables,我使它們實現自定義IDataAdapterProvider,以便它們可以提供自己的DbCommands

+0

我想現在是時候畢業了,找到更好的解決方案......缺乏共同的基礎課已經讓我很長時間煩惱了。 – 2009-10-12 20:39:11

+0

TableAdapter被聲明爲partials。你可以在TableAdapters上實現一個接口:) – 2009-12-30 05:40:35

+0

是的,好點...但是它們不能從DbDataAdapter繼承,因爲它們已經從Component繼承 – 2009-12-30 09:21:21