6

アクセスデータベース(.mdb)で、すべてのUnicode圧縮とすべての「長さゼロを許可」をオフにするプログラムを作成する必要があります。

[ゼロ長を許可]をオフにする方法は非常にうまく機能します。ただし、Unicode圧縮をオフにする方法はまったく機能せず、次の例外が返されます。

複数ステップのOLEDB操作でエラーが発生しました。可能な場合は、各OLEDBステータス値を確認します。作業は行われませんでした。

これを解決する方法についての手がかりはありますか?

private void TurnOffUnicodeCompressionInField(ADOX.CatalogClass catalogClass, String tableName, String field)
{           
    ADOX.Column column = catalogClass.Tables[tableName].Columns[field];
    ADOX.Property prop = column.Properties["Jet OLEDB:Compressed UNICODE Strings"];
    prop.Value = true;
}

private void TurnOffAllowZeroLengthInAllFields(ADOX.CatalogClass catalogClass, String tableName)
{
    foreach (ADOX.Column column in catalogClass.Tables[tableName].Columns)
        column.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
}

private void MyButton_Click(object sender, EventArgs e)
{
    String filePath = "";
    OpenFileDialog ofd = new OpenFileDialog();
    DialogResult result = ofd.ShowDialog();

    if (result == DialogResult.OK)
    {
         filePath = ofd.FileName; 
         ADOX.CatalogClass catDatabase = new ADOX.CatalogClass();
         catDatabase.let_ActiveConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath);

        // SoftwareTable 
        TurnOffAllowZeroLengthInAllFields(catDatabase,"Software"); 
        TurnOffUnicodeCompressionInField(catDatabase, "Software", "Description");
        TurnOffUnicodeCompressionInField(catDatabase, "Software", "Name");
    }                      
}
4

1 に答える 1

0

適切な UNICODE 値を持たない文字がないか文字列を確認する必要があります。これらは、MS Word などのアプリケーションからテキストをコピーして貼り付けたときに発生することがよくあります。具体的には、「スマート クォート」が問題を引き起こすことがよくあります。

また、次のスレッドもご覧ください (C++ ですが) C++での ADOX プロパティの使用に関するディスカッション

プロパティをループして現在の値を表示できますか?

于 2011-08-12T18:52:20.523 に答える