0

OleDbConnection、MySqlConnection、OdbcConnection、および Db2Connection 用にいくつかの異なるデータベース アクセス レイヤーを維持するのではなく、ジェネリックを使用する方法を見つけようとしていました。ただし、コードをコンパイルしようとするとエラーが発生し、クラスのメソッドまたはプロパティにアクセスしようとするとエラーが発生します。

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
            );
        }
    }
}

これを回避する方法はありますか?それとも、多くのバージョンを処理できる別のクラスでしょうか?

4

3 に答える 3

5

制約を探しています:

public class DatabaseConnector<TConnection> where TConnection : DbConnection, new() {
于 2012-10-22T18:22:50.180 に答える
1

whereクラス定義でを使用してみてください。

 class DatabaseConnector<CONNECTION> where CONNECTION: DbConnection

このように、共通クラスで定義されたメソッドを使用できるようになります。

その後、コマンドおよび必要な他のすべての関数用の同様のクラスを作成する必要があります。

于 2012-10-22T18:27:13.737 に答える
0

それはそれを修正しました!インターフェイスを使用することは私には思いつきませんでした。

public class DatabaseConnector<CN, TRANS, CMD, DA, PARAM>
    where CN:IDbConnection
    where TRANS:IDbTransaction
    where CMD:IDbCommand
    where DA:IDbDataAdapter
    where PARAM:IDbDataParameter
于 2012-10-22T18:51:09.303 に答える