与Parameters.Add和Parameters.AddWithValue的区别

Joh*_*Woo 31 .net c# vb.net ado.net

基本上CommandsParameters和参数有像Add,AddWithValue等等的功能.在我看过的所有教程中,我通常注意到他们正在使用Add而不是AddWithValue.

.Parameters.Add("@ID", SqlDbType.Int)
Run Code Online (Sandbox Code Playgroud)

VS

.Parameters.AddWithValue("@ID", 1)
Run Code Online (Sandbox Code Playgroud)

有没有理由不使用AddWithValue?我宁愿用那个

Parameters.Add("@ID", SqlDbType.Int, 4).Value = 1
Run Code Online (Sandbox Code Playgroud)

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

ada*_*ost 26

使用Add()方法,您可以通过指定数据的类型和长度来限制用户输入 - 尤其是对于varchar列.

.Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName;
Run Code Online (Sandbox Code Playgroud)

AddWithValue()(隐式转换值)方法的情况下,它将nvarchar值发送到数据库.

  • 请注意,上有一个重载。添加后,您可以添加SqlParameter / OleDbParameter / DbParameter。当您在参数实例中“省略”参数名称(通过将其设置为NULL)时,会遇到讨厌的性能问题:.Net框架将为您创建“ Parameter1..x”的名称。现在,这对于SqlParameter来说似乎很愚蠢,您需要匹配@variable。但是使用OleDbParameter ... (2认同)

lea*_*tes 8

我相信使用AddWithValue也会影响SQL Cache Excection Plan,这里请参阅参数长度部分