我的代码如下:
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 + "',"
有什么想法吗?
答案 0 :(得分:12)
有没有办法解决这个问题,而不从字符串中删除单引号?
是 - 改为使用参数化SQL。您应该永远直接在SQL中使用变量值。它可以允许SQL injection attacks,导致转换奇怪,并且通常会使SQL更难以阅读。
有关参数化SQL的示例,请参阅the documentation for SqlCommand.Parameters
。
基本上,我们的想法是你的SQL包含对参数的引用,例如
INSERT INTO SomeTable(Foo, Bar) VALUES (@Foo, @Bar)
然后分别指定@Foo
和@Bar
的值。这些值不是SQL本身的一部分,因此它们是否包含在SQL中具有特殊含义的字符并不重要。