2014-01-14 2 views
20

Когда следует использовать Parameters. Add/AddWithValue? В следующем примере MSDN они используют Parameters.Add для int и Parameters.AddWithValue для stringПараметры SqlCommand Добавить или AddWithValue

command.Parameters.Add("@ID", SqlDbType.Int); 
command.Parameters["@ID"].Value = customerID; 

command.Parameters.AddWithValue("@demographics", demoXml); 

Что лучше использовать для datetime

+1

['cmd.Parameters.Add' устарел сейчас. Вместо этого используйте 'cmd.Parameters.AddWithValue' (http://stackoverflow.com/a/29554589/3936696) –

ответ

28

Используйте Add, если вы хотите, чтобы все четко с немного больше работы. Используйте AddWithValue, если вы ленивы. AddWithValue будет выводить тип параметра его значения, поэтому убедитесь, что это правильный тип. Вы должны, например, разобрать string до int, если это правильный тип.

Существует одна причина, чтобы избежать Add, если ваш тип параметра int вы должны быть осторожны с overload that takes the parameter-name and an object с тех пор another overload is chosen with the SqlDbType-enum.

От remarks:

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

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

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

+0

[' cmd.Parameters.Add' устарел сейчас. Вместо этого используйте 'cmd.Parameters.AddWithValue' (http://stackoverflow.com/a/29554589/3936696) –

+4

@RahulNikate:' AddWithValue' также не самый лучший способ, поскольку он указывает тип параметра из значения paramater , Это часто приводит к плохим планам выполнения или неправильным преобразованиям. Он также не проверяет параметр в первую очередь (f.e. type, если 'Datetime', но вы передаете' String'). Только 'Add (String parameterName, Object value)' устарело все другие перегрузки 'Add' not. Я предпочитаю тот, который принимает имя параметра и 'SqlDbType' (учтите, чтобы указать размер, если тип строки). –

+1

'AddWithValue' просто избегает проблемы, упомянутой в моем ответе, и имеет те же функции, что и' Add (string, object) '. –

Смежные вопросы