Vb.net 使用sqlitedatadapter将日期列保存到基础数据库时出错

Vb.net 使用sqlitedatadapter将日期列保存到基础数据库时出错,vb.net,sqlite,system.data.sqlite,Vb.net,Sqlite,System.data.sqlite,如果您能帮助我找出在保存回数据库时出错的原因,我将不胜感激。错误为:并发冲突:UpdateCommand影响了预期的1条记录中的0条。 我已经计算出,只有当我的表有一个日期字段时才会发生错误,我使用sqlitedatadapter从底层数据库中填充该字段,如下所示: Public connstring As String=Data Source=c:\VS-2019\SaveTable\SaveTable\Data\TestDb.db 公共连接作为新的SQLiteConnection 公共子表

如果您能帮助我找出在保存回数据库时出错的原因,我将不胜感激。错误为:并发冲突:UpdateCommand影响了预期的1条记录中的0条。 我已经计算出,只有当我的表有一个日期字段时才会发生错误,我使用sqlitedatadapter从底层数据库中填充该字段,如下所示:

Public connstring As String=Data Source=c:\VS-2019\SaveTable\SaveTable\Data\TestDb.db 公共连接作为新的SQLiteConnection 公共子表 conn.ConnectionString=connstring 康涅狄格州公开赛 DTAllCustomers.Rows.Clear sql=从客户中选择* AllCustomerAdapter=新SQLiteDataAdaptersql,conn AllCustomerAdapter.FilldAllCustomers 端接头 然后,我使用此代码修改DataTabledAllCustomers中的一些记录

对于i=0到DTAllCustomers.Rows.Count-1 如果DTAllCustomers.Rowsi.Itemsitecode=RESI,则 DTAllCustomers.Rowsi.ItemEmail=已更改 如果结束 下一个 然后,我尝试使用以下命令将修改后的表保存回基础数据库:

Dim cbAllCustomers作为新的SQLiteCommandBuilderalCustomersAdapter AllCustomerAdapter.UpdateCommand=cbAllCustomers.GetUpdateCommand 尝试 AllCustomerAdapter.UpdatedAllCustomers 特例 MsgBoxex.Message 结束尝试 当我删除DTAllCustomers中的DATETIME列时,错误消失,更新正确完成。SQLite是否在填充datatable和保存回datatable之间更改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。

首先,此行没有用处:AllCustomerAdapter.UpdateCommand=cbAllCustomers.GetUpdateCommand。如果您不打算修改得到的命令,那么获取它就没有意义了。我并不真正使用SQLite,但据我所知,它没有特定的日期/时间数据类型。您的意思是使用数据类型为DATETIME的列,还是使用名为DATETIME的列,例如,使用存储日期/时间数据的文本?请在创建SQLiteCommandBuilder后发布UpdateCommand的CommandText值。最好检查命令对象参数的数据类型。了解它是如何强制并发的,这一点很重要。SQLiteCommand对象可以使用参数化语句正确地存储和检索日期,但CommandBuilder可能没有正确地翻译/解释日期表示。您可能需要编写更新命令才能正确执行。感谢CP,我已经查看了参数值,日期列的格式为-5/30/2018 12:00:00 AM,但是在命令文本中,表中的每一列都有一个@paramX=1,传递的paramX的值为0。@Brad在回复其他用户时,确保使用适当的降价;否则,用户将不会收到通知,并且可能永远不会看到/回复您的评论。虽然它有点灵活,但它不会识别用户名的所有缩写。单击注释框旁边的帮助链接以了解更多信息。