首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除C#中的WHERE

删除C#中的WHERE
EN

Stack Overflow用户
提问于 2020-04-23 23:12:43
回答 1查看 112关注 0票数 0

重复这个问题,因为它没有得到满意的答复。Delete where in clause in sqlite

实际上,在与原始海报Cholo完全相同的场景中,我尝试了一个简单的参数化Delete语句。

代码语言:javascript
运行
复制
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的输出:

代码语言:javascript
运行
复制
1, 2, 3, 4, 5, 6
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 23:29:09

我认为问题在于变量的值。尝试:

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

更新:正如John评论的那样,如果"UIDcsv“有某种用户输入,这将允许SQL注入。其他解决办法有:

1)在"IN“上使用" OR”(UID = @ID1或UID = @ID2 .)

2)使用for-循环来添加" in“条件下的值(对每个值添加一个参数,并添加一个带有序号(@ID1、@ID2等)的"IN”值)。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61398495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档