2012-04-25 6 views
0

mssqlでストアドプロシージャを使用して値を挿入したいとします。この手順を使用して、ストアドプロシージャパラメータをsqlDataSource、msSQLに追加

ALTER PROCEDURE dbo.insertNewMember 
(@name varchar(30), 
@age int) 
AS 
BEGIN 
    INSERT INTO member(memId, name, age) VALUES ('', @name, @age); 
END 

私のC#コード:

addStaffSql.InsertCommand = "insertNewMember"; 
addStaffSql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; 
addStaffSql.InsertParameters.Add("@name", name); 
addStaffSql.InsertParameters.Add("@age", age); 
addStaffSql.Insert(); 

しかし、私はプログラムの実行時に、私は次のエラーを得た:これは私のストアドプロシージャであるあなたならば

Procedure or function 'insertNewMember' expects parameter '@name', which was not supplied. 

を私は感謝します。

答えて

2

Add()メソッドで "@"記号を消してみてください。

addStaffSql.InsertCommand = "insertNewMember"; 
addStaffSql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; 
addStaffSql.InsertParameters.Add("name", name); 
addStaffSql.InsertParameters.Add("age", age); 
addStaffSql.Insert(); 
+0

このソリューションのため、このエラーメッセージが表示されます: "文字列またはバイナリデータが切り捨てられます。 – Shnkc

+0

@ShnkcあなたのSPは、 "name"のデータ型がvarchar(30)であることを示しています。これは問題を引き起こしている可能性があります。プロシージャに渡す文字列の長さを確認します。 – Jason

+0

よろしいですか。その後、問題は解決されます – Shnkc

0

nullを変数nameに渡すと思います。そのためにコードを変更することができます。

if(name!=null) 
{ 
    addStaffSql.InsertCommand = "insertNewMember"; 
    addStaffSql.InsertCommandType = SqlDataSourceCommandType.StoredProcedure; 
    addStaffSql.InsertParameters.Add("@name", name); 
    addStaffSql.InsertParameters.Add("@age", age); 
    addStaffSql.Insert(); 
} 
else 
{ 
    //Send message back to user that name is not filled properly ! 
} 
+0

すべての変数をチェックします。このクエリを使用すると、 "addStaffSql.InsertCommand =" INSERT INTOメンバー(名前、年齢)VALUES( '"+ name +"'、+ age + "')"; "が使用され、正常に評価されます。しかし、私はまだ成功しなかったストアドプロシージャでそれを行う必要があります – Shnkc

関連する問題