DELETE WHERE IN C# Sqlite [repicate] (删除)


此问题重复,因为没有得到满意的答复。删除 sqlite 中的 where 子句

在与原发帖者Cholo完全相同的情况下,我正在尝试一个简单的参数化删除语句。

string UIDcsv = "1, 2, 3, 4, 5, 6";
Console.WriteLine(UIDcsv);

var sqlite_DeleteEmployee = new SQLiteCommand(sqlite_Conn);
sqlite_DeleteEmployee.CommandText = "DELETE FROM myTable WHERE UID IN (@x);";
sqlite_DeleteEmployee.Parameters.AddWithValue("@x", UIDcsv);
sqlite_DeleteEmployee.Prepare();
sqlite_DeleteEmployee.ExecuteNonQuery();

就像Cholo在链接的 “已接受的回答 “中发现的那样,代码运行良好,但实际上并没有执行这个语句。这让我整个晚上都很沮丧。

现在我写了这个,我正在看我的其他代码,意识到这个C# Sql命令生成器很可能在命令中的@xyz周围自动添加引号,将UID列表变成一个单一的字符串。我如何阻止这种情况发生?

WriteLine的输出。

1, 2, 3, 4, 5, 6

解决方案:

我认为问题出在变量的值上。

sqlite_DeleteEmployee.CommandText = "DELETE FROM myTable WHERE UID IN (" + UIDcsv +");";

更新:正如John评论的那样,如果 “UIDcsv “有某种用户输入,这将允许SQL注入。其他的解决方法有:1)使用 “OR “来代替 “UIDcsv”。

1) 在 “IN “上使用 “OR”(UID = @ID1 OR UID = @ID2 …)。

2)使用for-loop来添加 “IN “条件下的值(对于每一个值,你都会添加一个参数,并添加一个带有顺序号的 “IN “值(@ID1,@ID2,等等

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在buildSrc中从一个自定义的Gradle插件中访问Android的 "dynamicFeatures "属性。

2022-9-8 11:22:20

未分类

HyLang import_buffer_to_ast 删掉了 0.18.0 版。

2022-9-8 11:22:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索