我在代码中有以下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列为空的行。
答案 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还是其他因为问题出在其他地方。