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");
}
}
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
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
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. –