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

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

        }


天涯尽头无女友
浏览 290回答 4
4回答

幕布斯7119047

你可以使用Select()。string[] sStatList = sStatus.Split(','); var res = string.Join(",", sStatList.Select(s => $"'{s}'"));这需要using System.Linq;。

紫衣仙女

试试这个:        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 + ")";

守候你守候我

您可以使用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 注入。考虑以下:status = "10,20,30');/*,*/ DROP TABLE Users;//";例如Dapper直接支持这个:}var sql = "SELECT * FROM table WHERE Id IN @ids"var results = connection.Query(sql, status.Split(','));并且有替代的 orms 可以处理参数化。作为旁注:避免在 C# 中使用匈牙利表示法,因为微软也建议. 您使用前缀指定变量类型的匈牙利表示法是无用的信息并且会增加噪音,尤其是 VS 和 VS Code 无论如何都会告诉您类型。

侃侃无极

@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.
打开App,查看更多内容
随时随地看视频慕课网APP