2010-04-30 118 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或某事,因爲問題在別處。