2010-07-26 9 views
6

Je dois créer un programme qui désactive toute compression Unicode et tous "autoriser la longueur zéro" dans une base de données d'accès (.mdb).ADOX opération OLE DB en plusieurs étapes généré des erreurs

La méthode pour désactiver Autoriser la longueur zéro fonctionne très bien. Toutefois, la méthode de désactivation de la compression Unicode ne fonctionne pas du tout et renvoie l'exception suivante:

L'opération OLE DB en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état OLE DB, si disponible. Aucun travail n'a été fait.

Des indices sur la façon de résoudre ce problème?

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

Ce problème se produit également en cours d'exécution dans Access. Le SQL suggéré dans votre post précédent ne convient-il pas? – Fionnuala

+0

Je dois utiliser ADOX pour supprimer Allow Zero Length, alors pourquoi ne pas supprimer la compression UNICODE en utilisant ADOX? Dommage que ça ne marche pas comme prévu .. Toutes les idées? – MadSeb

+1

ADOX est une couche d'abstraction de données non native et ne sera pas nécessairement capable de manipuler toutes les propriétés d'un moteur de base de données particulier. Jet/ACE est un cas particulièrement grave dans la mesure où sa couche d'interface de données native, DAO, a été paralysée pendant la campagne MS ADO-everywhere dans le cadre de la version Jet 4. Le résultat malheureux est que pour presque tout, vous pouvez utiliser DAO, mais pour un certain nombre de choses, le seul support est dans ADO. Et, oui, c'est idiot et ça craint vraiment. Je ne sais pas si l'équipe d'accès a l'intention de corriger cela dans l'ACE ou si certaines d'entre elles ont déjà été corrigées. –

Répondre

0

Vous devriez vérifier vos chaînes de caractères qui ne sont pas des valeurs UNICODE appropriées, celles-ci peuvent souvent être introduit lorsque le texte est copié et collé à partir d'une application comme MS Word. Plus précisément, les «citations intelligentes» provoquent souvent des problèmes.

Jetez également un coup d'oeil au fil suivant (bien qu'il soit en C++) Discussion on ADOX Property Usage in C++.

Etes-vous capable de parcourir les propriétés et d'afficher leurs valeurs actuelles?

Questions connexes