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");
}
}
Questo problema si verifica anche in esecuzione in Access. L'SQL suggerito nel post precedente non è adatto? – Fionnuala
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
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. –