与Parameters.Add和Parameters.AddWithValue的区别

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

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

VS

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

有没有原因不使用AddWithValue ? 我宁愿使用它

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

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

使用Add()方法,您可以通过指定数据的types和长度来限制用户input – 特别是对于varchar列。

 .Parameters.Add("@name",SqlDbType.VarChar,30).Value=varName; 

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

我相信也有一些利用AddWithValue来影响SQL Cache Excection Plan,参见参数长度部分

我会使用正常情况下的AddWithValue。 只有当你的列types与.net转换CLRtypes的方式不同时才使用Add(name,dbtype …)。