Próbuję zaktualizować prostą bazę danych dostępu MS. Dostaję wyjątek na niektórych tabelach, które po wyszukaniu znalazłem Microsoft Support - Syntax Error. Sądzę, że oznacza to, że jedna z nazw kolumn używa zarezerwowanego słowa. Wydaje się, że tak jest, ponieważ wszystkie tabele są aktualizowane, z wyjątkiem tych o identyfikatorze "GUID" jako jednej z nazw kolumn, słowem zastrzeżonym. Ta strona mówi również, że powinienem używać OleDbAdapter i DataSet, które powinny rozwiązać problem. Niestety nie mogę zmienić nazwy kolumny. To jest poza moją kontrolą, więc muszę pracować z tym, co jest mi dane.Używanie OleDbDataAdapter i DataSet do aktualizacji Access.mdb
Nie musiałem dużo pracować z bazami danych, a wszystko, co wiem, nauczyłem się na przykładach z Internetu (prawdopodobnie złe). Jaki jest więc właściwy sposób aktualizacji bazy danych za pomocą OleDbAdapter i DataSet?
Nie sądzę, że powinienem używać DataTable lub OleDbCommandBuilder i uważam, że rozwiązanie ma coś wspólnego z parametrami. Ale moje umiejętności googleingowe są słabe.
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; " +
Data Souce=" + source);
conn.Open();
OleDbAdapter adapter = new OleDbDataAdapter("SELECT * From " + table, conn);
OleDbCommandBuiler cmdBuiler = new OleDbCommandBuilder(adapter);
DataSet = new DatSet();
adapter.InsertCommand = cmdBuilder.GetInertCommand(true); // Is this necessary?
adapter.Fill(dataSet, table);
DataTable dataTable = dataSet.Tables[table]; // Do I need a DataTable?
DataRow row = dataTable.
row [ attribute ] = field; // Do this for all attributes/fields. I think this is wrong.
dataTable.rows.Add(row);
adapter.Update(dataTable); //<--"Syntax error in INSERT INTO statement." Exception
Zrobiłem to, ale musiałem nadal używać DataSet. W przeciwnym razie wygenerowałby wyjątek w 'adapter.Fill'. Wyjątkiem był 'System.ArgumentException'' {"Obiekt nie jest obiektem ADODB.RecordSet ani ADODB.Record. \ R \ nIdentyfikacja parametru: adodb"} '. Dzięki Matt. – SaulBack
Dzięki, to była moja pierwsza odpowiedź na SO, więc cieszę się, że udało się to dla ciebie! – Matt
Jeśli używasz 'OleDbCommandBuilder', możesz użyć' cmdBuilder.QuotePrefix = "["; 'i' cmdBuilder.QuoteSuffix = "]"; '. –