#c# #.net #ms-access #oledb #oledbdataadapter
#c# #.net #ms-access #oledb #oledbdataadapter
Вопрос:
Что я пытаюсь сделать:
Обновите базу данных .mdb Access с помощью DataTable и DataAdapter. Пожалуйста, посмотрите мой код ниже.
using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;
Jet OLEDB:Database Password=iaggyah;User ID=Admin;
Data Source=C:aaaaaaaaaaaaaaaaaaaaaresourcesSurvey1.mdb;"))
{
con.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [SurveyTest1]", con);
surveyTbl.Load(cmd.ExecuteReader());
surveyTbl.Rows[0]["SurveyName"] = "test2";
try
{
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand("SELECT * FROM [SurveyTest1]", con);
OleDbCommandBuilder cmdBuilder = new OleDbCommandBuilder(adapter);
cmdBuilder.QuotePrefix = "[";
cmdBuilder.QuoteSuffix = "]";
adapter.DeleteCommand = cmdBuilder.GetDeleteCommand();
adapter.InsertCommand = cmdBuilder.GetInsertCommand();
adapter.UpdateCommand = cmdBuilder.GetUpdateCommand();
adapter.Update(surveyTbl);
}
catch (Exception e)
{
string error = e.Message;
}
}
Проблема
Когда он попадает в ‘adapter.Строка «Обновить» выдает исключение OleDbException с сообщением «Параметр неверен». Пожалуйста, смотрите подробности ошибки ниже:
Код ошибки: -2147024809 Источник: System.Data.Обычная трассировка стека:
at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
at System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
at Tests.Test.UpdateTest_ReturnsTrue() in C:aaaaaaaaaaaaaaaaaaaaaTest.cs:line 251
Я тщательно поискал проблему в Google и не нашел ничего, что имело бы отношение к делу.
Я попытался написать команду обновления и обновить ее таким образом, и, похоже, это сработало. Следовательно,
другой альтернативой, о которой я подумал, было просто обновить каждую строку в цикле for, но мне нужно иметь возможность обновлять любую таблицу в базе данных во время выполнения, так что это может затруднить динамическое обновление с различными типами данных. Я думаю, я был бы вынужден просто использовать varchar (если я не ошибаюсь ??).
Дополнительные сведения:
Windows 10
.NET framework 4.7.2
Visual Studio 2019
Проект библиотеки классов
Заранее благодарю вас.
Комментарии:
1. Вы не назначили
surveyTbl
типу. Вы используете его, но что это такое? Вы назначаете его перед использованием stmt?2. Трудно сказать, что вы делаете. Проверьте это .
3. Спасибо за предложения, ребята. Я просто использовал другой способ обхода.