如何逃避正斜线?

时间:2010-04-30 12:21:41

标签: c# sql-server-2008

我在代码中有以下sql命令,因为当我在更新后评估sql行时该参数包含正斜杠,该列只是空的。

sqlCommand.CommandText = String.Format("update {0} set {1}='{2}'where id = @Id",
                                        tableName, ColumnName, forwardSlashText);
sqlCommand.Parameters.Add("@Id", SqlDbType.UniqueIdentifier).Value = rowId;
numRowsAffected = sqlCommand.ExecuteNonQuery();

在此命令中添加log.debug我得到以下输出...

  

更新my_table_name设置   mime_type ='application / pdf'其中id =   @Id

所以我假设命令是正确的,但是然后查看mime_type列为空的行。

3 个答案:

答案 0 :(得分:3)

斜线不是问题。但是,关于这个问题,为什么不将forwardSlashText作为参数提交,就像你对@Id所做的一样?

答案 1 :(得分:2)

首先,通过使用String.Format()来合成您的查询,请注意您没有为SQL注入攻击做好准备。 (确保tableName和ColumnName来自可信来源。

其次,我就是这样做的。请注意表和列名称周围的括号(它将转义表名或列名中可能包含的任何时髦字符)。但更重要的是,请注意forwardSlashText现在是一个参数:

sqlCommand.CommandText = String.Format("update [{0}] set [{1}] = @val where id = @Id",
                                    tableName, ColumnName);
sqlCommand.Parameters.AddWithValue("@Id", rowId);
sqlCommand.Parameters.AddWithValue("@val", forwardSlashText);
numRowsAffected = sqlCommand.ExecuteNonQuery();

答案 2 :(得分:0)

如果将该SQL复制并粘贴到SQL Server Management Studio并执行它,会影响多少行?您需要排除WHERE子句问题,因为这听起来像问题。你还应该log.debug ID的值来检查它是否正确。

可能是-1还是其他因为问题出在其他地方。