Ошибка при сохранении столбца даты в базовой базе данных с помощью sqlitedatadapter - PullRequest
0 голосов
/ 06 октября 2019

Буду признателен за помощь в выяснении причины ошибки при сохранении в базу данных. Ошибка: «Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей». Я выяснил, что ошибка возникает только тогда, когда в моей таблице есть поле даты, которое я заполняю из базовой базы данных, используя sqlitedatadapter следующим образом:

Public connstring As String = "Data Source=c:\VS-2019\SaveTable\SaveTable\Data\TestDb.db"
Public conn As New SQLiteConnection

Public Sub FillMainTables()
    conn.ConnectionString = connstring
    conn.Open()
    DTAllCustomers.Rows.Clear()
    sql = "SELECT * FROM Customers"
    AllCustomersAdapter = New SQLiteDataAdapter(sql, conn)
    AllCustomersAdapter.Fill(DTAllCustomers)
End Sub

Затем я изменяю несколько записей в таблице данных (DTAllCustomers)используя этот код

For i = 0 To DTAllCustomers.Rows.Count - 1
    If DTAllCustomers.Rows(i).Item("sitecode") = "RESI" Then
         DTAllCustomers.Rows(i).Item("Email") = "Changed"
    End If
Next

Затем я пытаюсь сохранить измененную таблицу обратно в базовую базу данных с помощью:

Dim cbAllCustomers As New SQLiteCommandBuilder(AllCustomersAdapter)
AllCustomersAdapter.UpdateCommand = cbAllCustomers.GetUpdateCommand
Try
   AllCustomersAdapter.Update(DTAllCustomers)
Catch ex As Exception
   MsgBox(ex.Message)
End Try

Когда я удаляю столбцы DATETIME в DTAllCustomers, ошибка исчезает, и обновлениезавершает правильно. Изменяет ли SQLite структуру / значение даты в столбцах DateTime между заполнением таблицы данных и ее сохранением в таблице данных?


UpdateCommand.CommandText:

UPDATE [main].[sqlite_default_schema].[Customers] SET [Email] = @param1 
    WHERE (([PrimaryKey] = @param2) 
    AND ([CustomerNumber] = @param3) 
    AND ((@param4 = 1 AND [Zone] IS NULL) OR ([Zone] = @param5)) 
    AND ((@param6 = 1 AND [SiteCode] IS NULL) OR ([SiteCode] = @param7)) 
    AND ((@param8 = 1 AND [FirstName] IS NULL) OR ([FirstName] = @param9)) 
    AND ((@param10 = 1 AND [Surname] IS NULL) OR ([Surname] = @param11)) 
    AND ((@param12 = 1 AND [Villa] IS NULL) OR ([Villa] = @param13)) 
    AND ((@param14 = 1 AND [Village] IS NULL) OR ([Village] = @param15)) 
    AND ((@param16 = 1 AND [Address] IS NULL) OR ([Address] = @param17)) 
    AND ((@param18 = 1 AND [Suburb] IS NULL) OR ([Suburb] = @param19)) 
    AND ((@param20 = 1 AND [PostCode] IS NULL) OR ([PostCode] = @param21)) 
    AND ((@param22 = 1 AND [Phone] IS NULL) OR ([Phone] = @param23)) 
    AND ((@param24 = 1 AND [Mobile1] IS NULL) OR ([Mobile1] = @param25)) 
    AND ((@param26 = 1 AND [Mobile2] IS NULL) OR ([Mobile2] = @param27)) 
    AND ((@param28 = 1 AND [Email] IS NULL) OR ([Email] = @param29)) 
    AND ((@param30 = 1 AND [System] IS NULL) OR ([System] = @param31)) 
    AND ((@param32 = 1 AND [Panels] IS NULL) OR ([Panels] = @param33)) 
    AND ((@param34 = 1 AND [Isolator] IS NULL) OR ([Isolator] = @param35)) 
    AND ((@param36 = 1 AND [Inverter] IS NULL) OR ([Inverter] = @param37)) 
    AND ((@param38 = 1 AND [SolarHotWater] IS NULL) OR ([SolarHotWater] = @param39)) 
    AND ((@param40 = 1 AND [Skylight] IS NULL) OR ([Skylight] = @param41)) 
    AND ((@param42 = 1 AND [Rebate] IS NULL) OR ([Rebate] = @param43)) 
    AND ((@param44 = 1 AND [Quote] IS NULL) OR ([Quote] = @param45)) 
    AND ((@param46 = 1 AND [Notes] IS NULL) OR ([Notes] = @param47)) 
    AND ((@param48 = 1 AND [LastCleaned] IS NULL) OR ([LastCleaned] = @param49)) 
    AND ((@param50 = 1 AND [BookedInDate] IS NULL) OR ([BookedInDate] = @param51)) 
    AND ((@param52 = 1 AND [BookedInOrder] IS NULL) OR ([BookedInOrder] = @param53)) 
    AND ((@param54 = 1 AND [Frequency] IS NULL) OR ([Frequency] = @param55)) 
    AND ((@param56 = 1 AND [NextCallDue] IS NULL) OR ([NextCallDue] = @param57)) 
    AND ((@param58 = 1 AND [Status] IS NULL) OR ([Status] = @param59)) 
    AND ((@param60 = 1 AND [Source] IS NULL) OR ([Source] = @param61)))

Значения параметров и столбцы даты представлены в этом формате - # 5/30/2018 12:00:00 AM #, однаков тексте команды есть @paramX = 1 для каждого столбца в таблице, а передаваемый paramX имеет значение 0.

...