2012-04-25 64 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