<分区>
每当更新主键值时,我试图从 sql-server-ce 数据库中删除旧行(基于主键值)。
目标是(一旦提供了新 ID)使用插入语句添加一个新条目,然后删除旧条目。知道数据库本身的主键(城市标签号)的数据类型是 int 可能很重要,并且 C# 变量 originalCTag 被声明为 var,但在其声明时分配了“”(空字符串),然后分配所需目标主键值的字符串表示形式。
虽然这应该是一项简单的任务,但问题是:
为什么 sql Action 查询不起作用?在 WebMatrix 中使用 C#,这是我尝试过的:
db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = " + originalCTag);
^这表示在等号索引处解析查询时出错。
db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = @0", originalCTag);
^这表明输入字符串的格式不正确。
db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = @0", int.Parse(originalCTag));
^这表明输入字符串的格式不正确。
db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = @0", originalCTag.ToString());
^这(再一次)表明输入字符串的格式不正确(我们可以不使用 DELETE 语句参数化查询吗)?
所以...最后,我尝试了:
db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = '" + originalCTag + "'");
^这不会产生任何错误,但也不会执行它应该执行的操作(例如,删除行)。
此时,我有点不知所措。我希望这些语句中至少有一个能够执行所需的功能,如果不是几个的话。
显然我在这里遗漏了一些东西(如果那东西很明显我也不会感到惊讶)。如果这些语句中的任何一个“应该工作”,那么我的代码在 db.Execute 语句之前可能还有其他问题。
----------------更新---------------- 如果您想查看 db 声明语句:
var db = Database.Open("Vaccinations");
是的,Vaccinations 是数据库的名称和该数据库中的(唯一)表。