2012-04-25 73 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 2012-04-27 13:57:20

+0

@Shnkc你的SP显示“name”的数据类型是varchar(30),这可能是导致问题的原因。检查您传递给过程的字符串的长度。 – Jason 2012-04-27 14:07:42

+0

好吧,我明白了。然后,问题就解决了 – Shnkc 2012-04-27 14:58:20

0

我想你会在名为name的变量中传递null。你可能想改变你的代码。

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 2012-04-25 20:08:43

相关问题