none
OleDbDataAdapter.Update RRS feed

  • Общие обсуждения

  • Ребят, объясните мне убогому где чего надо пнуть в Адаптере, чтобы он зафурычил?

    Создал я базу в формате Access2007, в ней одну таблицу 'Подразделения', в таблице два поля Код (счетчик) и Название. Создал запрос на удаление записи по значению поля Код. Запрос в базе отрабатывает правильно.

    Затем в VS2010 создал приложение с формой и гридом на ней. Данные из таблицы успешно считываются и отображаются в Гриде. Удаляю несколько записей из Грида и пытаюсь сохранить изменения, из базы удаляется только одна запись, а потом мне выскакивает сообщение - Нарушение параллелизма: DeleteCommand затронула 0 из ожидаемых 1 записей.

    Ниже две процедуры, первая создает все необходимые объекты, загружает данные в DataSet и отображает все в Гриде.

    Вторая пытается сохранить изменения.

    ======================================================================================

       Private Sub myLoad()
            con = New OleDbConnection(connStr)

            Dim cmdSelect As New OleDbCommand("Подразделения_Все", con)
            cmdSelect.CommandType = CommandType.StoredProcedure
            adapter = New OleDbDataAdapter(cmdSelect)

            Dim cmdDelete As New OleDbCommand("Подразделения_Удалить", con)
            cmdDelete.CommandType = CommandType.StoredProcedure
            cmdDelete.Parameters.Add("Код_Подразделения", OleDbType.Integer, 0, "Код")
            adapter.DeleteCommand = cmdDelete

            ds = New DataSet

            Try
                con.Open()
                adapter.Fill(ds, "Подразделения")
                DataGridView1.DataSource = ds.Tables(0)
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End Sub
    ======================================================================================
        Private Sub mySave()
            Try
                con.Open()
                adapter.Update(ds, "Подразделения")
            Catch ex As Exception
                MsgBox(ex.Message)
            Finally
                con.Close()
            End Try
        End Sub

    ======================================================================================

    Пытался гуглить, ничего похожего и полезного не нашел.

    Подскажите пожалуйста где вообще копнуть для понимания этой проблемы?

    Заранее благодарен!
    9 апреля 2012 г. 20:13

Все ответы

  • Попробуй в DeleteCommand для параметра использовать

    parameter.SourceVersion = DataRowVersion.Original;

    10 апреля 2012 г. 4:57
    Модератор
  • Здравствуйте.

    Ошибка возникает при первом удалении или при последующих? После вызова метода Update, добавьте вызов метода AcceptChanges.

    Если проблема останется, то перед Update можно посмотреть какие именно строки были затронуты с помощью метода DataTable.GetChanges, и вывести эту таблицу в отдельный грид - возможно это поможет найти причину ошибки.


    Для связи [mail]

    10 апреля 2012 г. 6:52
  • Уважаемый пользователь, пожалуйста, не оставляйте топик без ответа или комментариев. Спасибо.


    Для связи [mail]

    12 апреля 2012 г. 9:11