2010-07-26 23 views
6

Muszę utworzyć program, który wyłącza całą kompresję Unicode i wszystkie "zezwalaj na zerową długość" w bazie danych dostępu (.mdb).ADOX Wielokrokowa operacja OLE DB wygenerowała błędy

Metoda wyłączania Zezwalaj na zerową długość działa bardzo dobrze. Jednak metoda wyłączania kompresji Unicode nie działa w ogóle i zwraca następujący wyjątek:

Operacja wieloetapowej operacji OLE DB wygenerowała błędy. Sprawdź każdą wartość statusu OLE DB, jeśli jest dostępna. Nie wykonano żadnej pracy.

Jakąkolwiek wskazówkę, jak rozwiązać ten problem?

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

Ten problem występuje również w programie Access. Czy SQL sugeruje, że poprzedni post nie jest odpowiedni? – Fionnuala

+0

Muszę użyć ADOX, aby usunąć Zezwalaj na zerową długość, więc dlaczego nie usunąć również kompresji UNICODE przy użyciu ADOX? szkoda, że ​​nie działa zgodnie z oczekiwaniami .. pomysłów? – MadSeb

+1

ADOX jest nienatywną warstwą abstrakcji danych i niekoniecznie będzie w stanie manipulować wszystkimi właściwościami określonego silnika bazy danych. Jet/ACE jest szczególnie zły w tym, że jego natywna warstwa interfejsu danych, DAO, została uszkodzona podczas kampanii MS ADO-everywhere w ramach czasowych wydania Jet 4. Niefortunnym wynikiem jest to, że prawie we wszystkich przypadkach można używać DAO, ale w przypadku kilku rzeczy jedyne wsparcie jest w ADO. I tak, to idiotyczne i naprawdę jest do bani. Nie wiem, czy zespół Access planuje poprawić to w ACE, czy też część z nich została już naprawiona. –

Odpowiedz

0

Należy sprawdzić ciągi dla znaków, które nie mają odpowiednich wartości Unicode, to często może być wprowadzony, gdy tekst jest skopiowany i wklejony z aplikacji takich jak MS Word. W szczególności "inteligentne cytaty" często powodują problemy.

Zobacz także następujący wątek (chociaż jest w języku C++) Discussion on ADOX Property Usage in C++.

Czy można przeglądać właściwości i wyświetlać ich bieżące wartości?

Powiązane problemy