我有这个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?
答案 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);