0

我有以下代码:

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具有带单引号的值时,会导致插入语句出错,例如:int'l Transp.

有没有办法解决这个问题,而不从字符串中删除单引号?

我正在尝试使用以下但没有奏效:

cmd.CommandText = @query
+ @ListOrdStatusTopInRB[i].ShipName + "',"

有任何想法吗?

4

1 回答 1

12

有没有办法解决这个问题,而不从字符串中删除单引号?

是 - 改用参数化 SQL。你不应该这样直接在你的 SQL 中使用变量值。它可能允许SQL 注入攻击,导致转换异常,并且通常会使 SQL 更容易阅读。

有关参数化 SQL 的示例,请参阅文档。SqlCommand.Parameters

基本上,这个想法是您的 SQL 包含对参数的引用,例如

INSERT INTO SomeTable(Foo, Bar) VALUES (@Foo, @Bar)

然后分别指定 和 的@Foo@Bar。这些值不是 SQL 本身的一部分,因此它们是否包含在 SQL 中具有特殊含义的字符并不重要。

于 2013-10-11T20:21:31.983 回答