1

これは、C# を知っている人にとっては非常に単純な質問に違いありませんが、少し迷っています。

クラスDbConnectionは から派生しIDbConnectionます。クラスOleDbConnectionOdbcConnection. objConnectionまたはのいずれかである必要がOleDbConnectionありますOdbcConnection

string connStr = CONNECTION_STRING.Replace("<FILENAME>", fullFileName);
IDbConnection objConnection = (myswitch) ? (IDbConnection)new OdbcConnection(connStr) 
                                         : (IDbConnection)new OleDbConnection(connStr);
objConnection.Open();
objConnection.GetSchema(...);
objConnection.Close();

クラスDbConnectionはインスタンス化できませんが、GetSchema呼び出したいメソッドがあります ( openandも呼び出しますclose)。IDbConnection にはこれらのメソッドがありませんCast to は機能しDbConnectionません。ifコードの大規模な繰り返しなしでこれらの呼び出しを実装する方法はありますか?

編集: 私はこれらの接続を使用して Excel ファイルを読み込んでいます。どうやら 64 ビット マシンには OdbcConnection が必要です (不明、まだ調査中)。

4

2 に答える 2

2

交換:

IDbConnection objConnection = (myswitch) ? (IDbConnection)new OdbcConnection(connStr) 
                                     : (IDbConnection)new OleDbConnection(connStr);

と:

// no need to cast here.
DbConnection objConnection = (myswitch) ? new OdbcConnection(connStr) 
                                     : new OleDbConnection(connStr);

DbConnectionは を実装しているためIDbConnection、インターフェイスの代わりにクラスを使用しても問題はありません。

実際、クラスには必要なものがありますが、インターフェイスにはないため、この特定のケースではこれが推奨される方法です。このようにして、変数はコンパイラ エラーなしで のメソッドとプロパティobjConnectionを使用できるようになります。Dbconnection

于 2013-06-07T12:11:53.657 に答える