在C#的字符串中的每个值中放入单引号

时间:2019-04-26 04:10:02

标签: c# sql

我试图在每个值中用逗号分隔字符串中的单引号,以将其包括在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);
        }

4 个答案:

答案 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仍然会告诉您类型。