带有单引号的字符串字段在表中插入记录时会导致错误
我有下面的代码:
query = "insert into tblB2B_OrderStatusTopStillInRB (LSRNbr, ShipName, Units, DroppedInRB, EPT, Status, OnTimeStatus, ShipVia, DroppedInRB_Order, RealEPT) "; query += "values ('" + ListOrdStatusTopInRB[i].LSRNbr + "','" + ListOrdStatusTopInRB[i].ShipName + "'," + ListOrdStatusTopInRB[i].Units + ",'" + ListOrdStatusTopInRB[i].DroppedInRB + "','" + ListOrdStatusTopInRB[i].EPT + "','" + ListOrdStatusTopInRB[i].Status + "','" + ListOrdStatusTopInRB[i].OnTimeStatus + "','" + ListOrdStatusTopInRB[i].ShipVia + "','" + ListOrdStatusTopInRB[i].DroppedInRB_Order + "','" + ListOrdStatusTopInRB[i].RealEPT + "')"; cmd.CommandText = query; cmd.ExecuteNonQuery();
我刚刚意识到,当ShipName
具有带单引号的值时,会在insert语句中导致错误,例如: int'l Transp.
有没有办法解决这个问题,而不从字符串中删除单引号?
我正在尝试使用以下但不起作用:
cmd.CommandText = @query + @ListOrdStatusTopInRB[i].ShipName + "',"
有任何想法吗?
有没有办法解决这个问题,而不从字符串中删除单引号?
是 – 使用参数化SQL。 您不应该像这样直接在SQL中使用变量值。 它可以允许SQL注入攻击 ,导致转换奇怪,并且通常使SQL更难以阅读。
有关参数化SQL的示例,请参阅SqlCommand.Parameters
的文档 。
基本上,这个想法是你的SQL包含对参数的引用,例如
INSERT INTO SomeTable(Foo, Bar) VALUES (@Foo, @Bar)
然后分别指定@Foo
和@Bar
的值。 这些值不是SQL本身的一部分,因此它们是否包含在SQL中具有特殊含义的字符并不重要。
- ASP.NET web api无法获得application / x-www-form-urlencoded HTTP POST
- 如何使用自定义属性扩展IdentityUser
- 你如何看待在VS2015中使用Intellisense抛出哪些exception?
- 为什么在Log4Net中命名了logger?
- 在源代码中存储加密密钥有多安全?
- 使用.NET加密库在c#中使用.pem文件中的私钥解密
- 帮助我理解“LINQ to Entities仅支持转换实体数据模型基元类型”
- 我怎么在ConfiguredTaskAwaitable上“.Wait()”?
- 使用c#在asp.net中使用Windows身份validation