C# SQLite c-插入或更新不带主键或唯一键

C# SQLite c-插入或更新不带主键或唯一键,c#,sql,database,sqlite,C#,Sql,Database,Sqlite,假设我有两个数据库文件,主数据库和新数据库。每次发布新数据库文件时,用户都需要从新数据库更新主数据库 如果找到某行,例如CustomerName相同,则我需要 更新主数据库中的旧记录。 若并没有找到,那个么我需要将新记录插入主数据库。 我尝试的是从新数据库中选择所有行,然后使用reader.Read逐行检查。在循环中,我将检查updatesql是否返回-1,然后执行insertsql 上述方法存在性能问题,因为它需要遍历每一行以执行更新或插入。我建议的解决方案是将新数据库附加到主数据库中,然后从

假设我有两个数据库文件,主数据库和新数据库。每次发布新数据库文件时,用户都需要从新数据库更新主数据库

如果找到某行,例如CustomerName相同,则我需要 更新主数据库中的旧记录。 若并没有找到,那个么我需要将新记录插入主数据库。 我尝试的是从新数据库中选择所有行,然后使用reader.Read逐行检查。在循环中,我将检查updatesql是否返回-1,然后执行insertsql

上述方法存在性能问题,因为它需要遍历每一行以执行更新或插入。我建议的解决方案是将新数据库附加到主数据库中,然后从newdatabase.table执行INSERT或REPLACE table SELECT*

但很快我意识到了一个问题。我在表中实际上并没有主键,或者主键无助于决定插入或替换。这是由于某些特定的客户要求。在这种情况下,我不能在没有主键的情况下使用INSERT或REPLACE,例如,用于比较CustomerName的列不是唯一的或主键


如果您有更好的解决方案,请告诉我,谢谢

要插入缺少的行,并使用连接的数据库,可以执行以下操作:

插入表1 COL2,col3。。。选择col2、col3、。。。 从newdatabase.Table1(其中customername不在表1中)选择customername
这假设col1是主要的自动增量id。您需要命名除此col1之外的所有列。对于更新,使用“customer name in”执行类似的更新命令

您可以使用存储过程吗?不幸的是,sqlite没有存储过程:您的表中几乎应该始终有一个主键。请尝试查看此项,看看是否有帮助。它是SQLLIte的SQL存储过程的替代方案。很抱歉在这里造成误解,但我应该在这里编辑我的句子,主键只是自动递增id,因为表中可能有多个客户名称和id,所以主键无助于决定插入或替换