Буду признателен за помощь в выяснении причины ошибки при сохранении в базу данных. Ошибка: «Нарушение параллелизма: команда 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.