2017-02-08 31 views
0

asp:SqlDataSourceコントロールかDevExpressのASPxTreeListだとわかりませんが、Insert()メソッドを使ってストアドプロシージャを起動しようとすると、私は奇妙なエラーが発生します。SQLDataSource = "プロシージャまたは関数[名前]の引数が多すぎます。"

私はデータベース

protected void TagList_NodeInserting(object sender, DevExpress.Web.Data.ASPxDataInsertingEventArgs e) 
    { 
     SqlDataTagging.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; 
     SqlDataTagging.InsertParameters.Add("ParentID", e.NewValues["ParentTag_ID"].ToString()); 
     SqlDataTagging.InsertParameters.Add("TagName", e.NewValues["TagName_VC"].ToString()); 
     SqlDataTagging.InsertParameters.Add("UserID", "1"); 

     SqlDataTagging.InsertCommand = "sp_InsertTag"; 

     SqlDataTagging.Insert(); 
    } 

にノードを挿入しようとするノードを追加するとき、私は上記のコードを発射する場合しかし、私はこのエラーを取得する

プロシージャまたはファンクションsp_InsertTagがあまりにも多くの引数を持っています指定された。

私のSPヘッダ

ALTER PROCEDURE [dbo].[sp_InsertTag] (@ParentID INT, @TagName VARCHAR(100), @UserID int) 

しかし、あなたが見ることができるように、C#コードでSPと3の3つのパラメータがあります。

私は実際にテキストを介してSQLを実行すると、奇妙なことです。

​​

とC#でSQLを記述し、それが動作します、私はストアドプロシージャを使用することができますので...

誰もが任意のアイデアや任意の選択肢を持っていますか?

おかげ

+0

"SP_" 接頭辞の用心:http://stackoverflow.com/questions/20530211/avoid-naming-user-stored-procedures-sp-or-sp – Tanner

+0

警告をお寄せいただきありがとうございます。名前を変更したときにも同じエラーが発生しますが、その未来。 – user3428422

+1

これが起きたときに 'TagList_NodeInserting'が2回目に呼び出されていますか?同じ場合、それは同じパラメータコレクションオブジェクトですか?もしそうなら、あなたはコールの前にコレクションをクリアしていますか?コレクションを消去しても、新しいコレクションをインスタンス化します。 – radarbob

答えて

1

はあなたがツリーノードを移入するためにID SqlDataTaggingSqlDataSourceがあるとしTagList_NodeInserting方法はInsertParametersコレクションは、ストアドプロシージャで指定された3つの以上のパラメータを移入するので、ある時点で、複数回発射した場合、エラーが発生します。

この動作を軽減するために、私はあなたが以下のようなパラメータを追加する前にInsertParametersコレクションをクリア勧め:

... 
SqlDataTagging.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; 
SqlDataTagging.InsertParameters.Clear(); // add this line to clear InsertParameters collection before adding parameters 
SqlDataTagging.InsertParameters.Add("ParentID", e.NewValues["ParentTag_ID"].ToString()); 
SqlDataTagging.InsertParameters.Add("TagName", e.NewValues["TagName_VC"].ToString()); 
SqlDataTagging.InsertParameters.Add("UserID", "1"); 
... 

関連問題:

ASPxTreeList - The 'Procedure or function [name] has too many arguments specified' exception is raised when a node is deleted(同様のアプローチ)

+0

ありがとう、あなたの知識は私がそれを解決するのに役立ちました。 – user3428422

関連する問題