2

プロパティOleDbConnectionの戻り値から作成されたを開いているときに、予期しない例外がスローされました。OleDbConnectionStringBuilder.ConnectionStringを使用して、OleDbConnectionStringBuilder相対DataSourceパスを絶対パスに更新していました。

呼び出すとSystem.Data.OleDb.OleDbException例外が発生し、「初期化文字列の形式が OLE DB 仕様に準拠していません」OleDbConnection.Openというメッセージが表示されます。.

コードは次のとおりです。

    var oleDBbuilder = new OleDbConnectionStringBuilder(connectString);

    oleDBbuilder.DataSource = ResolveDataSourcePath(oleDBbuilder.DataSource);

    m_pOleDb = new OleDbConnection(oleDBbuilder.ConnectionString);
    m_pOleDb.Open(); // <-- Throws exception here

値を含む接続文字列を処理しようとするまで、これに関する問題はありませんでしたMode=ReadWrite|Share Deny None;。プロパティによって返される値は、OleDbConnectionStringBuilder.ConnectionString引用符で囲まれた値を持つプロパティを返します。例えば:

この接続文字列 (変数 'c​​onnectString'):

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\SomePath\@Some Database.mdb;Mode=ReadWrite|Share Deny None;Persist Security Info=False

(OleDbConnectionStringBuilder.ConnectionString) になります:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source="c:\SomePath\Some Database.mdb";Persist Security Info=False;Mode="ReadWrite|Share Deny None"

引用符なしのMode値はエラーなしで機能します!

いくつか質問があります。

  • これは設計によるものですか?互換性のない値を返すのはなぜですか?
  • のジョブを複製せずにこれを回避するにはどうすればよいOleDbConnectionStringBuilderですか?
4

1 に答える 1