2010-04-30 114 views
1

我有以下的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该指令i得到以下输出...

更新MY_TABLE_NAME设置 MIME_TYPE = '应用/ PDF' 其中id = @Id

所以我会假设该命令是正确的,但随后看行mime_type列是空的。

+0

问题可能是在其他地方,例如,在分配'forwardSlashText'值或'rowId'值告诉我们,代码 – RedFilter 2010-04-30 12:24:51

回答

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(); 
+0

谢谢。是的,我的代码来自可信来源(c#端的代码,而不是参数输入) – AndrewB 2010-04-30 12:40:11

3

斜线不是问题。虽然在这个问题上,但是,为什么不提交forwardSlashText作为参数,就像您为@Id所做的那样?

0

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

机会是-1或某事,因为问题在别处。