与Parameters.Add和Parameters.AddWithValue的区别

时间:2012-02-06 02:29:32

标签: c# .net vb.net ado.net

基本上CommandsParameters,参数的功能类似AddAddWithValue等。在我看过的所有教程中,我通常会注意到它们正在使用Add而不是AddWithValue

.Parameters.Add("@ID", SqlDbType.Int)

VS

.Parameters.AddWithValue("@ID", 1)

有没有理由不使用AddWithValue?我更喜欢使用

Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1

因为它节省了我的编码时间。那么哪个更好用?哪个使用安全?它会提高性能吗?

4 个答案:

答案 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()将参数与当前值的长度相加。如果参数值的长度经常变化,则意味着每次都会生成新计划。这样会使您的查询运行速度变慢(额外的解析,编译时间),并且还会导致更高的服务器负载。