在String.format中插入撇号,C#

时间:2016-04-20 19:25:23

标签: c# sql-server tsql

我有这个string.format问题。我正在尝试在字符串中添加'

这就是我的目标。

string.Format(@"SELECT UserID FROM intListAccess IA
JOIN database.[fnc_CommaListDelimeter_to_tableInt](\'{0}\':, N',') I ON i.ID = IA.IntList
WHERE IA.DateTimeStamp >= CAST(GETDATE() AS DATE) AND IA.UserID = {1} AND IA.AppId = {2}", 
string.Join(",", IntList), UserID, AppId);

fnc_CommaListDelimeter执行的操作是使用由'122344,524572,126344,847858'之类的逗号删除符分隔的字符串,并将其转换为类似

的表格
|  id  |
|122344|
|524572|
|126344|
|847858|

每次运行代码时,它都会发送上面的函数,但不会将列表中的单引号传递给fnc_CommaListDelimeter

我尝试将\'放在它周围,所以看起来像\'{0}\'但是vstudio抛出异常,说'122344,524572,126344,847858\'附近的sqlException无效语法所以当我删除尾随\时它抛出相同的错误,但没有尾随\。有没有办法在vstudio中使用String.Format?

执行此操作

1 个答案:

答案 0 :(得分:1)

所以,我想首先说你这样做是错误的。您应该使用存储过程从应用程序层访问数据库。或者至少是参数化查询。您当前的实施不灵活,使您容易受到多个安全问题的影响。你应该完全接受评论中给你的建议。

话虽如此,看起来您的代码中有一个不需要的分号导致问题,并且在使用字符串文字语法时不需要反斜杠。试试这个:

string.Format(@"SELECT UserID FROM intListAccess IA
JOIN database.[fnc_CommaListDelimeter_to_tableInt]('{0}', N',') I ON i.ID = IA.IntList
WHERE IA.DateTimeStamp >= CAST(GETDATE() AS DATE) AND IA.UserID = {1} AND IA.AppId = {2}", 
string.Join(",", IntList), UserID, AppId);