6
我必須製作一個程序,關閉所有的Unicode壓縮以及訪問數據庫(.mdb)中的所有「允許零長度」。ADOX多步驟OLE DB操作產生的錯誤
關閉允許零長度的方法工作得很好。但是,關閉Unicode壓縮的方法完全不起作用,並返回以下異常:
多步驟OLE DB操作生成錯誤。檢查每個OLE DB狀態值(如果可用)。沒有工作完成。
任何線索如何解決這個問題?
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");
}
}
在Access中運行也會發生此問題。你以前的帖子中提到的SQL不適合嗎? – Fionnuala 2010-07-27 10:29:41
我必須使用ADOX刪除允許零長度,爲什麼不使用ADOX刪除UNICODE壓縮?太糟糕了,它不按預期工作..任何想法? – MadSeb 2010-07-27 15:13:25
ADOX是一個非本地數據抽象層,不一定能夠操縱任何特定數據庫引擎的所有屬性。 Jet/ACE是一個特別糟糕的情況,因爲它的原生數據接口層DAO在Jet 4發行版的時間框架中的MS ADO無處不在的活動期間受損。不幸的結果是幾乎所有的事情都可以使用DAO,但是對於一些事情來說,唯一的支持就是ADO。而且,是的,這是愚蠢的,它真的很糟糕。我不知道Access團隊是否打算在ACE中糾正這個問題,或者其中一些問題已經修復。 – 2010-08-05 20:09:21