C#和SQL动态where子句

时间:2018-08-13 10:35:07

标签: c# sql

我有一个winform,其中有许多文本框和组合框。用户将数据填充到我需要将其作为where子句添加到我的sql查询的每个文本框中。

在检查用户是否添加或选择了项目后,我尝试创建一个列表。我需要知道如何将此列表添加到查询中。

查询不带列表的

(kivuto_id, region_id)

此查询正常运行,但是我必须填写所有控件。 如果用户仅填写框,我需要知道如何制作条件。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最好的答案,但是它会起作用。我解决这个问题的方法是使用C#动态创建搜索字符串。如果搜索条件不是null或“”,则例如:

if(res_from != null && res_from != "")
   search_channel += "r.[Actual Date in] < @VALUE AND"; //You will need to add an AND/OR at the end and remove the trailing ones.

当您向SQL注入攻击开放时,我也不会直接插入值。

cmd.Parameters.AddWithValue("@VALUE", (res_from == null) ? res_from.Value.ToString("yyyy/MM/dd) : "");

您将需要一些代码来删除搜索字符串末尾的任何“ AND”或“ OR”,如果未使用搜索字符串,则还需要在开始时删除“ WHERE”。

删除最后一个“ AND”或“ OR”的代码如下:

if(search_channel.EndsWith("WHERE"))
    search_channel = search_channel.Substring(0, myString.Length-5);
if(search_channel.EndsWith("AND"))
    search_channel = search_channel.Substring(0, myString.Length-3);
if(search_channel.EndsWith("OR"))
    search_channel = search_channel.Substring(0, myString.Length-2);

不确定这是否是最好的解决方案,但对我有用。

我已根据注释进行了修改,并且即使res_from为null,我也将AddWithValue更改为可以工作,否则您将收到错误消息。