32

私たちのアプリケーションの 1 つで、この方法でストアド プロシージャに渡されたパラメーター

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

しかし、それは適切に機能しており、常に必要な結果が得られています。

だから私の質問は、パラメータの前に@を指定する必要がないようなものですか? @を追加するかどうか、誰でもこれについて答えてください。

4

5 に答える 5

31

ドキュメントによると、名前は次の文字で始まる必要があり@ます。

ParameterName は、@paramname の形式で指定されます。

ソース コード (参照ソースを参照) によると、必要に応じてSqlCommandが自動的に追加されます。SqlParameter.ParameterNameFixed@

はい、動作しますが、文書化されていない機能です。ベスト プラクティスでは、これに依存せず、手動でパラメーター名の前に@.

于 2012-04-20T11:43:48.580 に答える
2

参照:SqlParameter.ParameterNameプロパティおよびIDataParameter.ParameterNameプロパティ

ParameterNameは、@paramnameの形式で指定されます。パラメータに依存するSqlCommandを実行する前に、ParameterNameを設定する必要があります。データベースとしてSQLServerを使用している場合は、パラメーター名の前に@を指定する必要があります。

パラメータ名はバックエンドと同じである必要があります。その場合@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;
        }
于 2012-04-20T11:44:21.343 に答える