2012-10-22 36 views
0

與其爲OleDbConnection,MySqlConnection,OdbcConnection和Db2Connection維護幾個不同的數據庫訪問層,我試圖找出一種使用泛型的方法。但是,當我嘗試編譯代碼時出現錯誤,當我嘗試訪問類的方法或屬性時出現錯誤。C#中的泛型與OleDbConnection

public class DatabaseConnector<CONNECTION> { 
    private CONNECTION connection = default(CONNECTION); 
    public bool IsConnected { 
     get { 
      return (
       this.connection != null && 
       // error on connection.State on the following two lines 
       this.connection.State != System.Data.ConnectionState.Closed && 
       this.connection.State != System.Data.ConnectionState.Broken 
      ); 
     } 
    } 
} 

有沒有辦法解決這個問題?或者也許是另一個可以處理多個版本的類?

+0

他們已經有了這個:只對所有那些使用基類,DbConnection。您只需在創建初始連接對象時引用特定的實現,之後只需使用DbXXX類型,並且您的代碼可以在所有這些類型中運行。 –

回答

5

你要找的約束:

public class DatabaseConnector<TConnection> where TConnection : DbConnection, new() { 
1

嘗試使用where在類定義:

class DatabaseConnector<CONNECTION> where CONNECTION: DbConnection 

這樣你就可以使用普通類中定義的方法。

之後,您將需要爲命令和所需的所有其他功能創建類似的類。

0

修好了!我從來沒有想過使用接口。

public class DatabaseConnector<CN, TRANS, CMD, DA, PARAM> 
    where CN:IDbConnection 
    where TRANS:IDbTransaction 
    where CMD:IDbCommand 
    where DA:IDbDataAdapter 
    where PARAM:IDbDataParameter