Нужно ли добавлять @перед именем SqlParameter?

В одном из наших приложений параметры передаются в хранимую процедуру таким образом

Dim parm As New SqlParameter("searchText", SqlDbType.VarChar)
parm.Direction = ParameterDirection.Input
parm.Size = 50
parm.Value="test"

cmd.Parameters.Add(parm)

и процедура содержит параметр как @searchText

т.е. имя параметра, переданное из кода, является searchText а в хранимой процедуре - @searchText.

Но это работает правильно, я всегда получаю требуемые результаты.

Так что мой вопрос такой, что нет необходимости указывать @ перед параметром? Будет ли добавляться @, может кто-нибудь дать ответ на это.

Ответ 1

Согласно документации, имя должно начинаться с @:

ПараметрName указан в форме @paramname.

В соответствии с исходным кодом (посмотреть на SqlCommand и SqlParameter.ParameterNameFixed в опорном источнике), @ добавляется автоматически, если это необходимо.

Так что да, это работает, но это недокументированная функция. Лучшая практика рекомендует не полагаться на это и вручную префикс имени вашего параметра с помощью @.

Ответ 2

Ссылка: свойство SqlParameter.ParameterName и свойство IDataParameter.ParameterName

ПараметрName указан в форме @paramname. Вы должны установить ParameterName перед выполнением SqlCommand, который опирается на параметры. Если вы используете Sql Server в качестве базы данных, вы должны указать @перед именем параметра.

ваше имя параметра должно быть таким же, как и в backend, например. у вас есть @searchText тогда в спецификации вашего параметра он должен быть SqlParameter("@searchText"..

ваш код должен быть таким

Dim parm As New SqlParameter("@searchText", SqlDbType.VarChar)
parm.Direction = ParameterDirection.Input
parm.Size = 50
parm.Value="test"

cmd.Parameters.Add(parm)

Примечание. Oracle и SqLite используют разные символы различного назначения, чтобы указать параметр, и может быть символ @не используется, указанный спецификацией ado.net.

Редактировать: По комментариям

Как вы указали ссылку, это также какое-то исправление, но в соответствии с документацией msdn вы должны указать позиционный параметр с помощью "@", используете ли вы какой-либо поставщик данных oledb, sql, odbc. ссылка

if (0 < parameterName.get_Length() && '@' != parameterName.get_Chars(0))
        {
            parameterName = "@" + parameterName;
        }

Ответ 3

Не обязательно указывать @. Однако, это лучшая практика.

Его аналогично по аналогии со строками. Конечно, нет никакого вреда в определении строк как таковых в.NET:

string s;
//Rest of the code follows;

Но опять же, это лучшая практика, чтобы определить их как:

string s = string.Empty;

Понимаете, это вопрос об условностях и лучших практиках !!!

Ответ 4

Я рекомендовал вам использовать маркер "@" с вашим именем параметра. SqlParameter помогает автоматически добавлять, но параметр других может не совпадать.