誰教你了這個語法真的教會你一個錯誤的東西。
如您所猜,此語法將字符串txtSlipID_srch
的內容連接到您的SQL文本,從而形成固定文本和可變部分的完整指令。整個事情然後傳遞給數據庫引擎執行。
但允許用戶輸入文本框的東西,然後使用該輸入來建立SQL查詢確實是一個錯誤的事情
,用戶可以輸入任何東西,任何東西也可能是一個很好僞造的字符串改變您的意圖並破壞您的數據庫或獲取您不希望他看到的信息(密碼或信用卡號碼)。它被稱爲Sql Injection,並且有數以千計的關於如何實現這種黑客技術的文章。我不想重複任何事情,你可以簡單地看看這個well known comics+question+answers並閱讀下面的解釋
除此之外。存在正確解析字符串的問題。在您的字符串變量中出現單引號可能會導致您的查詢無效,因爲單引號用於分隔傳遞給數據庫的字符串值。使用轉換過程的小數和日期應該在字符串中進行轉換。同樣在這裏,您應該爲數據庫創建正確的文本(它是否像逗號或小數點?,日期格式爲'dd/MM/yyyy'或'MM/dd/yyyy'或什麼?等等)
唯一有效的方法是使用你寫你的命令文本以這種方式參數化查詢
selectSQL = "SELECT * FROM slip WHERE [email protected]";
現在沒有更多的兩個字符串和字符串值的兩邊沒有單引號'的串聯轉義「他們,但只是一個名爲@id
的參數佔位符。
ADO.NET庫將提供相應的類來處理該參數,並將該值傳遞給數據庫引擎,以便在該數據庫引擎中進行正確處理。
SqlCommand cmd = new SqlCommand(selectSQL, connection);
cmd.Parameters.Add("@id", SqlDbType.NVarChar).Value = txtSlipID_srch;
SqlDataReader reader = cmd.ExecuteReader();
......
你應該歸還這本書並要求你的大學退款。這是從C#執行SQL代碼的一種可怕方式,因爲它會將您的應用程序打開到SQL注入,這是一個巨大的安全風險。 –
大學的名字是什麼,我想把它列入我的黑名單。 :) –
不要聽書 - **使用參數化查詢**! –