每当更新主键值时,我都试图从 sql-server-ce 数据库中删除旧行(基于主键值)。
目标是(一旦提供了新 ID)使用插入语句添加新条目,然后删除旧条目。重要的是要知道数据库本身的主键(城市标记号)的数据类型是 int,而 C# 变量 originalCTag 被声明为 var,但在声明时分配了“”(空字符串),然后分配所需目标主键值的字符串表示形式。
虽然这应该是一项简单的任务,但问题是:
为什么 sql 操作查询不起作用?在 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 语句之前我的代码可能还有其他问题。
-------------------UPDATE----------------- 如果您想查看 db 声明语句:
var db = Database.Open("Vaccinations");
是的,疫苗接种是数据库的名称和该数据库中的(唯一)表。