簡體   English   中英

如何逃脫正斜線?

[英]How to escape forward slash?

我通過代碼獲得以下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列為空的行。

斜線不是問題。 但是,在討論這個主題時,為什么不像對@Id一樣提交forwardSlashText作為參數呢?

首先,通過使用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();

如果將那個SQL復制並粘貼到SQL Server Management Studio中並執行它,那么會影響多少行? 您需要排除WHERE子句問題,因為這聽起來像是問題。 您還應該log.debug ID的值以檢查ID的值是否正確。

可能是-1或其他原因,因為問題出在其他地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM