Sqlite Mono upsert

时间:2016-08-16 05:31:25

标签: c# sqlite mono upsert

根据这里类似问题的各种示例,我试图在单声道中使用sqlite组合一个upsert。

awk 'BEGIN{FS=OFS="~"} {
   sub(/[T ].*/, "", $2)
   split($2, a, /\//)
   $2 = a[3] "-" a[1] "-" a[2] "T00:00:00Z"
} 1' file

ab c1~2010-10-20T00:00:00Z~1234~10.02~530.55
ab c2~2010-10-10T00:00:00Z~12346~11.03~531
abc3~2010-10-10T00:00:00Z~122~12~532.44
abc4~2010-10-11T00:00:00Z~110~13~533

出于某种原因,我得到了一个例外,因为它似乎不喜欢INSERT行的WHERE部分

string query = string.Format(@"
                    UPDATE {0} SET data=@data, protoent=@protoent, posX=@pX, posY=@pY, posZ=@pZ, ownerpubkey=@ownerpubkey WHERE key=@key;
                    INSERT INTO {0} (key, data, protoent, posX, posY, posZ, ownerpubkey) VALUES (@key, @data, @protoent, @pX, @pY, @pZ, @ownerpubkey) WHERE changes() = 0;
                    ", PersistEntityRecord.TableName);

如果我删除了INSERT行上的WHERE,它就会运行。我不确定为什么它不会像那部分那样。

SqliteConnection.SQLiteVersion报告版本3.11.0如果有帮助

由于

1 个答案:

答案 0 :(得分:0)

INSERT statement有两种形式。 WHERE子句只能在使用SELECT查询指定要插入的值的表单中使用:

str

在代码中执行逻辑可能更容易:

UPDATE {0}
SET data=@data, protoent=@protoent, posX=@pX, posY=@pY, posZ=@pZ, ownerpubkey=@ownerpubkey
WHERE key=@key;

INSERT INTO {0} (key, data, protoent, posX, posY, posZ, ownerpubkey)
SELECT @key, @data, @protoent, @pX, @pY, @pZ, @ownerpubkey
WHERE changes() = 0;