MSDNのドキュメントと例を参照してください hereParamters.Add
呼び出しの正しい構文は次のとおりです。
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
パラメータ名、SqlDbType
、および.Value
の値を指定する必要があります。
Parameters.AddWithValue
呼び出しの正しい構文は次のとおりです。
command.Parameters.AddWithValue("@demographics", demoXml);
1行でType
部分をスキップします。
私の質問は次のとおりです。このようにするとどうなるのですか。
command.Parameters.Add("@demographics", demoXml);
// .Add method with .AddWithValue syntax
コンパイルエラーは発生せず、さらに奇妙なことに、コードが実行されたときにすべてが正常に動作しているようです。
違いは、AddWithValueを使用する場合の暗黙的な変換です。実行中のSQLクエリ(ストアドプロシージャ)がint、nvarcharなどの型の値を受け入れていることがわかっている場合、コードで再宣言する理由はありません。
複雑な型のシナリオ(例:DateTime、float)の場合、Addを使用しますが、これはより明示的ですが、より単純な型のシナリオ(IntからInt)ではAddWithValueです。
command.Parameters.Add("@ID", SqlDbType.Int);
のようにタイプを明示的に指定しないと、入力を予期したものに暗黙的に変換しようとします。
この欠点は、暗黙的な変換が最適な変換ではなく、パフォーマンスが低下する可能性があることです。
このまさにトピックに関する議論がここにあります: http://forums.asp.net/t/1200255.aspx/1
commandObj.Parameter.Add()を使用する場合、最初に2つのパラメーターを受け取り、2番目のパラメーターはデータ型ですが、。
CommandObj.Parameter.Add("@ID",SqlDbType.Int).Value=textBox1.Text;
//.AddWithValueの場合
CommandObj.Parameter.AddWitheValue("@ID",textBox1.Text);
iDは、データ型がIntであるストアドプロシージャのパラメーターです。
機能面で違いはありません
addwithvalue
メソッドは、値としてオブジェクトを取ります。型データ型のチェックはありません。データ型がSQLテーブルと一致しない場合、潜在的にエラーが発生する可能性があります。 add
メソッドでは、最初にデータベースタイプを指定する必要があります。これは、このようなエラーを減らすのに役立ちます。
詳細については、 ここをクリックしてください