Почему перегруженный Add был заменен на AddWithValue? - PullRequest
0 голосов
/ 05 октября 2010

Перегруженный метод SqlParameterCollection.Add (String, Object) помечен как устаревший с версии 3.5 SP1 .NET Framework. Вы должны использовать метод AddWithValue () , который был представлен в версии 2.0.

Есть ли веская причина, почему Add (String, Object) был заменен на AddWithValue ()? Я согласен с этим изменением, но мне любопытно, почему это изменение было сделано.

Ответы [ 3 ]

4 голосов
/ 05 октября 2010

Я думаю, что это связано с возможностью неправильного использования, описанной в документах MSDN, на которые вы ссылались:

Будьте осторожны при использовании этого перегрузка SqlParameterCollection.Add метод для указать целочисленные значения параметров Потому что эта перегрузка принимает значение Тип объекта, вы должны преобразовать интегральное значение для типа объекта, когда значение равно нулю, как следующий C # пример демонстрирует.

parameters.Add("@pname", Convert.ToInt32(0));

Если вы не выполните это преобразование, компилятор предполагает, что вы пытаясь вызвать SqlParameterCollection.Add (string, SqlDbType) перегрузка.

На самом деле документы, на которые вы ссылались для нового API, говорят так:

Перегрузка Add, которая принимает строка и объект устарели из-за возможной неопределенности с SqlParameterCollection.Add overload который принимает String и SqlDbType значение перечисления, где передача целое число со строкой может быть интерпретируется как либо значение параметра или соответствующий Значение SqlDbType.

0 голосов
/ 01 августа 2018

Я знаю, что это старый пост, но вы должны прочитать:

https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

Это говорит в основном, что AddWithValue иногда может неверно выводить правильный тип.Вместо этого используйте Add.

0 голосов
/ 05 октября 2010

Я полагаю, что это произошло из-за неоднозначности из-за значения, передаваемого через Object, и других перегрузок Add().Я могу вспомнить ситуации, когда я непреднамеренно вызывал другую версию Add (), потому что передаваемое мной значение имело другой, более конкретный тип данных.

...