我正在使用C#中的SqlCommand類在SQL服務器上執行存儲過程。目前,我只是建立一個執行字符串,將參數值解析到存儲過程,然後在服務器上執行字符串。問題是當我有引號字符串沒有得到正確傳遞使用引號將參數傳遞給SQL Server SP
是否有可能使用SqlParameter對象傳遞參數,而不必擔心引用脫離?
我正在使用C#中的SqlCommand類在SQL服務器上執行存儲過程。目前,我只是建立一個執行字符串,將參數值解析到存儲過程,然後在服務器上執行字符串。問題是當我有引號字符串沒有得到正確傳遞使用引號將參數傳遞給SQL Server SP
是否有可能使用SqlParameter對象傳遞參數,而不必擔心引用脫離?
是的,這是發送參數的首選方式。
例子:
using (SqlCommand cmd = new SqlCommand("SomeProcedure", connection) {
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 42;
cmd.Parameters.Add("@Text", SqlDbType.Varchar, 50).Value = "A string value";
cmd.ExecuteNonQuery();
}
簡而言之,是的 - 您應該至少使用SqlParameter對象而不是字符串連接,以防止SQL注入攻擊。
使用SqlParameter時,您可以指定參數的類型和大小。這樣做可以確保執行計劃的重用(儘管StoredProcs不是這樣的問題),但也確保您不必擔心轉義和引用 - 這些都是爲您完成的。
聽起來像是小鮑比表的工作。 –