Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it necessary to add a @ in front of an SqlParameter name?

In one of our application the parameters passed to a stored procedure in this way

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

cmd.Parameters.Add(parm)

and the procedure contains a parameter as @searchText

i.e. the parameter name passed from the code is searchText and that in the stored procedure is @searchText .

But it is working properly, I am always getting the required results.

So my question is like so there is no need to specify @ before the parameter? Whether it will append @, can anyone please give an answer for this.

like image 652
Mahesh KP Avatar asked Apr 20 '12 11:04

Mahesh KP


2 Answers

According to the documentation, the name must start with an @:

The ParameterName is specified in the form @paramname.

According to the source code (have a look at SqlCommand and SqlParameter.ParameterNameFixed in the reference source), an @ is added automatically, if needed.

So yes, it works, but it's an undocumented feature. Best practice recommends that you do not rely on this and manually prefix your parameter name with an @.

like image 177
Heinzi Avatar answered Nov 15 '22 06:11

Heinzi


Ref: SqlParameter.ParameterName Property and IDataParameter.ParameterName Property

The ParameterName is specified in the form @paramname. You must set ParameterName before executing a SqlCommand that relies on parameters. If you are using Sql Server as Database then you must specify @ before the parameter name.

your parameter name must be same as at backend eg. you have @searchText then in your parameter specification it must be SqlParameter("@searchText" ..

your code should be like this

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

cmd.Parameters.Add(parm)

Note: Oracle and SqLite use different use different character to specify parameter and there may be @ symbol is not used specified by the specification of ado.net.

Edit: By comments

As you specified the link, it is also some sort of fix, but as per the msdn documentation, you must specify the positional parameter with '@' whether you are using any data provider oledb, sql, odbc. Ref

if (0 < parameterName.get_Length() && '@' != parameterName.get_Chars(0))
        {
            parameterName = "@" + parameterName;
        }
like image 2
Niranjan Singh Avatar answered Nov 15 '22 07:11

Niranjan Singh