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

前端 未结 4 1948
逝去的感伤
逝去的感伤 2020-11-27 08:19

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

Dim parm As New SqlParameter(\"searchText\", SqlDbType.VarChar)
parm.Direct         


        
相关标签:
4条回答
  • 2020-11-27 08:48

    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 @.

    0 讨论(0)
  • 2020-11-27 08:50

    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;
            }
    
    0 讨论(0)
  • 2020-11-27 08:53

    Its not compulsory to specify the @. However, its a best practice.

    Its similar in analogy to strings. There certainly is no harm in defining strings as such in .NET:

    string s;
    //Rest of the code follows;
    

    But again, its a best practice to define them as :

    string s = string.Empty;
    

    You see, its a question of conventions and best practices!!!

    0 讨论(0)
  • 2020-11-27 09:02

    I recommended you to use add "@" marker with your parameter name. SqlParameter helps to add automatically, but others' parameter might not to.

    0 讨论(0)
提交回复
热议问题