2010-07-26 4 views
6

Ich muss ein Programm machen, das alle Unicode-Komprimierung und alle "Zulassen Null Länge" in einer Access-Datenbank (.mdb) deaktiviert.ADOX Mehrstufiger OLE DB-Vorgang generierte Fehler

Die Methode zum Deaktivieren von Nulllänge zulassen funktioniert sehr gut. Die Methode zum Deaktivieren der Unicode-Komprimierung funktioniert jedoch überhaupt nicht und gibt die folgende Ausnahme zurück:

Mehrstufiger OLE DB-Vorgang generierte Fehler. Überprüfen Sie jeden OLE DB-Statuswert, falls verfügbar. Keine Arbeit wurde getan.

Irgendwelche Anhaltspunkte, wie man das löst?

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"); 
    }      
} 
+0

Dieses Problem tritt auch beim Ausführen in Access auf. Ist die in Ihrem vorherigen Beitrag vorgeschlagene SQL nicht geeignet? – Fionnuala

+0

Ich muss ADOX verwenden, um Null Länge zu entfernen, also warum nicht auch UNICODE-Komprimierung mit ADOX entfernen? Schade, es funktioniert nicht wie erwartet .. irgendwelche Ideen? – MadSeb

+1

ADOX ist eine nicht-native Datenabstraktionsschicht und kann nicht unbedingt alle Eigenschaften einer bestimmten Datenbank-Engine bearbeiten. Jet/ACE ist insofern besonders schlimm, als seine native Datenschnittstellenschicht (DAO) während der MS ADO-everywhere-Kampagne im Zeitrahmen der Jet 4-Version verkrüppelt war. Das unglückliche Ergebnis ist, dass Sie für fast alles DAO verwenden können, aber für einige Dinge ist die einzige Unterstützung in ADO. Und, ja, es ist idiotisch und es ist wirklich scheiße. Ich weiß nicht, ob das Access-Team plant, dies in der ACE zu korrigieren, oder ob ein Teil bereits behoben wurde. –

Antwort

0

Sie sollten Ihre Strings Zeichen überprüfen, die oft nicht angemessen UNICODE-Werte haben, können diese eingeführt werden, wenn der Text kopiert und von einer Anwendung wie MS Word eingefügt. Insbesondere die "intelligenten Zitate" verursachen oft Probleme.

Werfen Sie auch einen Blick auf den folgenden Thread (obwohl es in C++ ist) Discussion on ADOX Property Usage in C++.

Können Sie die Eigenschaften durchlaufen und ihre aktuellen Werte anzeigen?

Verwandte Themen