我得到這個錯誤:動態SQL查詢導致「未閉合的引號」的錯誤
Unclosed quotation mark after the character string ''.
用下面的代碼:
lSQL = "DELETE FROM tblCourses where courseCode='" + aCourseCode + "'";
哪裏lSQL
是局部變量,aCourseCode
是一個存儲值。有什麼建議麼?
我得到這個錯誤:動態SQL查詢導致「未閉合的引號」的錯誤
Unclosed quotation mark after the character string ''.
用下面的代碼:
lSQL = "DELETE FROM tblCourses where courseCode='" + aCourseCode + "'";
哪裏lSQL
是局部變量,aCourseCode
是一個存儲值。有什麼建議麼?
您應該總是使用參數化查詢或您的代碼容易出錯,因爲您正在收到的錯誤和SQL注入攻擊甚至更糟糕。 從來沒有在構建SQL查詢時使用字符串連接。下面是正確的方法:
using (var conn = new SqlConnection(ConnectionString))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "DELETE FROM tblCourses WHERE courseCode = @courseCode";
cmd.Parameters.AddWithValue("@courseCode", aCourseCode);
int deletedRowsCount = cmd.ExecuteNonQuery();
}
這將確保即使aCourseCode
變量包含了一些逃生和危險的人物,他們將得到妥善處理。
+1這個查詢會做什麼更不用說這也會使任何引號'aCourseCode'變量。 – Yuck
非常感謝你的幫助.... :) –
一個更好的辦法來格式化字符串就是用這樣的:
lSQL = String.Format("DELETE FROM tblCourses where courseCode='{0}'", aCourseCode);
另外,還要確保你沒有任何嵌入雙引號或單引號中的變量aCourseCode。
希望有所幫助。
您可能會在aCourseCode變量中出現單引號或雙引號。
任何機會aCourseCode包含單引號?請使用參數化的SQL查詢來防止SQL注入。這裏有一個很好的解釋http://www.uberasp.net/getarticle.aspx?id=46。考慮一下,如果aCourseCode是字符串「x」或1 = 1「 – driis
你的課程名稱可能是」Sql的漏洞的歷史記錄「 – Jimmy