0

この質問と回答では、理論と目的の結果を達成するための方法について説明しているので、これらの提案を再ハッシュしたくありません。すべてのテーブルアダプターを書き直す前に、インスタンスに簡単な解決策がないことを確認しようとしています。

私が持っているのは、すべてVSで設計された多くのデータセットを利用し、VistaDBデータベースにアクセスする比較的成熟した複雑なプロジェクトです(元々はSQLCEでした)。さまざまな理由から、データセットがバインドされている実際のデータベースをユーザーが選択できるようにしたいと思います。エンドユーザーのデータベースの選択は、すべて同じSQLコマンドを使用するデータベースに制限されます。

私はかなりの調査を行いましたが、いくつかの想定される解決策はこれを行うと主張していますが、深く掘り下げてもデータベースの種類は変更されず、接続文字列またはパスのみが変更されます。

誰かが実際にこれを達成しましたか?もしそうなら、少なくとも理論を教えてください、そしてせいぜい彼らが使用したコードを提供してください。

ありがとう ...

4

1 に答える 1

1

データベースエンジンクラスを直接使用するのではなく、インターフェイスIDbConnection、IDataReader、IDbCommand、およびIDbDataAdapterを使用して独自のデータベース層を実装する場合は、複数のデータベースエンジンを対象にすることができます。

このアプローチについては、次の記事で説明しています: http ://www.dotnetjohn.com/articles.aspx?articleid=244

また、複数のデータベースエンジンを対象とする場合は、SQLステートメントを変更する必要があることに注意してください。たとえば、VistaDBとSQL Serverは一重引用符で囲まれた日付( '2010-06-26')を受け入れますが、Accessデータベースは日付に#記号(#2010-06-26#)を受け入れます。

これは、次の文字を返す関数を使用してデータベースレイヤーで実行することもできます。

'Access DB Provider
Public Function GetDateSQLChar() As String Implements MyDataLayer.GetDateSQLChar
   Return "#"
End Function

'VistaDB Provider
Public Function GetDateSQLChar() As String Implements MyDataLayer.GetDateSQLChar
   Return "'"
End Function
于 2010-06-26T12:23:35.380 に答える