2010-07-26 11 views
6

Devo creare un programma che disattivi tutta la compressione Unicode e tutti "consenta la lunghezza zero" in un database di accesso (.mdb).ADOX Errori generati dall'operazione OLE DB a più fasi

Il metodo per disattivare Allow Zero Length funziona molto bene. Tuttavia, il metodo per disattivare la compressione Unicode non funziona affatto e restituisce la seguente eccezione:

Errori generati dall'operazione OLE DB a più fasi. Controllare ciascun valore di stato OLE DB, se disponibile. Nessun lavoro è stato fatto

Qualsiasi indizio su come risolvere questo?

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

Questo problema si verifica anche in esecuzione in Access. L'SQL suggerito nel post precedente non è adatto? – Fionnuala

+0

Devo usare ADOX per rimuovere Allow Zero Length quindi perché non rimuovere anche la compressione UNICODE usando ADOX? peccato che non funzioni come previsto..anche idee? – MadSeb

+1

ADOX è un livello di astrazione dati non nativo e non sarà necessariamente in grado di manipolare tutte le proprietà di un particolare motore di database. Jet/ACE è un caso particolarmente grave in quanto il suo livello di interfaccia dati nativo, DAO, è stato danneggiato durante la campagna MS ADO-ovunque nel periodo di tempo della versione di Jet 4. Il risultato sfortunato è che per quasi tutto, è possibile utilizzare DAO, ma per alcune cose, l'unico supporto è in ADO. E, sì, è idiota e fa davvero schifo. Non so se il team di Access stia pianificando di correggere questo nella ACE o se alcuni di essi sono già stati corretti. –

risposta

0

Si dovrebbe controllare le corde per i personaggi che non hanno valori Unicode appropriati, questi possono essere spesso introdotte quando il testo viene copiato e incollato da un'applicazione come MS Word. In particolare le "virgolette" spesso causano problemi.

Dai anche un'occhiata al thread seguente (anche se è in C++) Discussion on ADOX Property Usage in C++.

Sei in grado di scorrere le proprietà e visualizzare i valori correnti?

Problemi correlati