gpt4 book ai didi

c# - 搜索列表、范围

转载 作者:行者123 更新时间:2023-11-30 21:20:11 27 4
gpt4 key购买 nike

我有一个 ASP.NET 应用程序需要使用列表和范围搜索 VARCHAR(20) 列。换句话说,输入可能是这样的:

ABC,444,CD-EF,90-BA,HIJ

并且结果需要等同于:

SELECT * FROM table
WHERE
Col1 = 'ABC' OR
Col1 = '444' OR
Col1 BETWEEN 'CD' AND 'EF' OR
Col1 BETWEEN '90' AND 'BA' OR
Col1 = 'HIJ'

范围可以接受常规的 SQL 列排序顺序。这里涉及两个主要部分:

  1. 将参数从 .NET 发送到存储过程。
  2. 使用 SP 中的参数进行搜索。

我考虑过的一些选项,它们并不相互排斥:

  1. 我可以按原样发送字符串。没有 array[] = SPLIT(',', @query) 或类似的,所以解析是低级的。我宁愿在 .NET 端进行解析。
  2. 在 .NET 端,转换为 XML,在 SP 中转换为表。
  3. 使用游标遍历表中已有的参数,进行单独查询,然后合并结果。
  4. 创建动态 where 子句(在 SQL 端使用 #1,或在 .NET 端)

.NET 端的动态 SQL 似乎是“简单”的出路,但我不认为它是最好的。有什么想法吗?

最佳答案

如何仅在 C# 中创建 SQL 语句。这意味着您可以控制您的输入字符串,这样您就不容易受到 SQL 注入(inject)攻击。

string para = "ABC,444,CD-EF,90-BA,HIJ";
StringBuilder sb = new StringBuilder("SELECT * FROM table WHERE ");
List<string> queries = new List<string>();
foreach (var part in para.Split(','))
{
if (part.Contains("-"))
{
var between = part.Split('-');
queries.Add(string.Format("Col1 BETWEEN '{0}' AND '{1}'", between[0], between[1]));
}
else
{
queries.Add(string.Format("Col1 = '{0}'", part));
}
}
sb.Append(string.Join(" OR ", queries.ToArray()));
string sql = sb.ToString();

关于c# - 搜索列表、范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408332/

27 4 0
文章推荐: c - 为什么我的输出是0?我该如何解决? C语言
文章推荐: javascript - 单击禁用的