我试图在每个值中用逗号分隔字符串中的单引号,以将其包括在SQL查询中(例如"AND STAT IN ('11', '12')
。如果您有任何想法,请帮助我。
样本数据:string sStatus = "10,20,30,40";
我已经尝试过拆分每个值。
if (!String.IsNullOrEmpty(sStatus))
{
string[] sStatList = sStatus.Split(',');
foreach (string p in sStatList)
{
}
sFilter = String.Format(" AND STAT IN ({0})", sStatList);
}
答案 0 :(得分:1)
您可以使用Select()
。
string[] sStatList = sStatus.Split(',');
var res = string.Join(",", sStatList.Select(s => $"'{s}'"));
这需要using System.Linq;
。
答案 1 :(得分:0)
尝试一下:
string[] sStatList = sStatus.Split(',');
string sFilter= "";
foreach (string p in sStatList)
{
sFilter = sFilter+ ("'" + p + "',");
}
if(sFilter.EndsWith(","))
{
sFilter = sFilter.Substring(0,sFilter.Length-1);
}
sFilter = " AND STAT IN (" + sFilter + ")";
答案 2 :(得分:0)
@oika的答案是正确的,但对于您尝试做的事情并不完全正确。但是Select
是这里的答案……尽管如此:
您需要添加对Linq
的引用:
using System.Linq;
然后
var sStatuses = sStatus.Split(',');
var parsedsStatuses = string.Join(",", sStatuses.Select(x => $"'{x}'"));
var sql = $"AND STAT IN ({ parsedsStatuses })";
您当然要小心,因为它为SQL Injection
带来了漏洞。
答案 3 :(得分:0)
您可以像这样使用string.Join
:
var status = "10,20,30,40";
if (!string.IsNullOrEmpty(status))
{
var sStatList = status.Split(',');
filter = $"'{string.Join("','", sStatList)}'";
}
您还有另一个选择,就是使用string.Replace
:
var status = "10,20,30,40";
filter = $"'{status.Replace(",","','")}'";
无论哪种方式,您都需要验证输入内容以避免SQL Injection。考虑以下内容:
status = "10,20,30');/*,*/ DROP TABLE Users;//";
例如Dapper直接支持此功能:}
var sql = "SELECT * FROM table WHERE Id IN @ids"
var results = connection.Query(sql, status.Split(','));
还有其他一些可以处理参数的规则。
请注意:避免在C#中将匈牙利表示法用作microsoft also recommends。使用前缀指定变量类型的匈牙利符号是无用的信息,并且会增加噪音,尤其是VS和VS Code仍然会告诉您类型。