创建字符串表达式时出现意外标记?
Posted
技术标签:
【中文标题】创建字符串表达式时出现意外标记?【英文标题】:Unexpected token when creating a string expression? 【发布时间】:2021-02-20 00:34:58 【问题描述】:我有以下代码:
public void UpdateCardSetColumn(CARD cardColumn, bool value, string cardId)
string strValue = value ? "1" : "0";
sql = $"UPDATE Card SET cardColumn.Text() = strValue WHERE CardGuid = 'cardId'";
RunExecute(db2, sql);
这里有错误'cardId
它告诉我
无效的表达式术语“
【问题讨论】:
您的 strvalue 必须用单引号括起来。编辑:答案不完整。如果列名指向数据库中的文本字段,则它必须在单引号之间。如果是数值,则不需要。cardColumn.Text()
的值是多少?另外,请注意SQL Injection。
我想指出,直接从某个输入字段添加文本的构造将存在安全风险。这种结构非常有可能进行 SQL 注入。
使用像实体框架这样的 ORM。使处理数据库中的数据变得更加容易。
还是要注意SQL注入的危险。如果有人输入“;delete * from tablename';”当程序有正确的权限时,表名中的所有行都将被删除。
【参考方案1】:
您需要注意避免这种字符串连接并且它容易受到 SQL 注入攻击,您应该始终使用parameterized queries 来避免SQL Injection 并消除错误,如下所示:
sql = "UPDATE Card SET cardColumn = @strValue WHERE CardGuid = @cardId";
yourSqlCommand.Parameters.AddWithValue("@strValue ", cardColumn.Text);
yourSqlCommand.Parameters.AddWithValue("@cardId", cardId);
虽然直接指定类型并使用Value
属性比AddWithValue
好:
yourSqlCommand.Parameters.Add("@cardId", SqlDbType.VarChar).Value = cardId;
在此处阅读更多信息:https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/
【讨论】:
请注意AddWithValue()
是 not recommended 并有其注意事项。应该改用.Add().Value
。
@41686d6564 谢谢,同意。我正在研究答案,已更新。【参考方案2】:
再次输入该行时问题已解决。文本中一定有一些非 ASCII 字符,因为它现在运行良好。
【讨论】:
以上是关于创建字符串表达式时出现意外标记?的主要内容,如果未能解决你的问题,请参考以下文章
从 React 向 GraphQL 服务器进行查询时出现意外错误 [重复]
带有电子的 Vue CLI - 使用本机模块时出现意外字符 (1:0)
Newtonsoft.Json.JsonSerializationException:'反序列化对象时出现意外标记:使用动态对象注释
语法错误:使用 renderToString(<RoutingContext ...renderProps /> 时出现意外标记 <