Почему я получаю «Параметр неверен» при обновлении базы данных Access с использованием DataAdapter?

#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. Спасибо за предложения, ребята. Я просто использовал другой способ обхода.