基本上Commands
有Parameters
,参数的功能类似Add
,AddWithValue
等。在我看过的所有教程中,我通常会注意到它们正在使用Add
而不是AddWithValue
。
.Parameters.Add("@ID", SqlDbType.Int)
VS
.Parameters.AddWithValue("@ID", 1)
有没有理由不使用AddWithValue
?我更喜欢使用
Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1
因为它节省了我的编码时间。那么哪个更好用?哪个使用安全?它会提高性能吗?
答案 0 :(得分:26)
使用Add()
方法,您可以通过指定数据的类型和长度来限制用户输入 - 尤其是对于varchar
列。
.Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName;
如果是AddWithValue()(隐式转换值)方法,它会将nvarchar值发送到数据库。
答案 1 :(得分:8)
我相信使用AddWithValue也会影响SQL Cache Excection Plan,但请参阅参数长度部分here
答案 2 :(得分:2)
我会将AddWithValue用于正常情况。并使用Add(name,dbtype ...仅当您的列类型与.net转换CLR类型的方式不同时。
答案 3 :(得分:1)
使用AddWithValue()将参数与当前值的长度相加。如果参数值的长度经常变化,则意味着每次都会生成新计划。这样会使您的查询运行速度变慢(额外的解析,编译时间),并且还会导致更高的服务器负载。