2011-02-04 78 views
1

這是駕駛我堅果;)過程或函數[sproc_name]預計參數「@materials」,但未提供

我已經這個存儲過程...

ALTER PROCEDURE [dbo].[sproc_FindFoundries] 
    (@materials varchar(1000), 
    @capabilities varchar(1000)) 
AS 
BEGIN 

/* insert SQL code here */ 

END 

程序接受兩個逗號分隔的字符串。在我的應用程序中,我有以下代碼。

BCDataContext db = new BCDataContext(); 
SqlParameter prmMaterials = new SqlParameter("materials", SqlDbType.VarChar, 1000); 
prmMaterials.Value = materialList; 
SqlParameter prmCapability = new SqlParameter("capabilities", SqlDbType.VarChar, 1000); 
prmCapability.Value = capabilityList; 

SqlConnection cn = new SqlConnection(db.Connection.ConnectionString); 
SqlCommand cmd = new SqlCommand("sproc_FindFoundries", cn); 
cmd.Parameters.Add(prmMaterials); 
cmd.Parameters.Add(prmCapability); 

SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
da.Fill(ds); 

當我執行該代碼時,得到錯誤

過程或函數[sproc_name]預計參數 '@materials',但未提供。

當我嘗試填充數據集。測試時,我已驗證兩個參數都包含數據且不爲空。有什麼我錯過了嗎?第二雙眼睛將不勝感激。

謝謝。

回答

7

使用@materials@capabilities作爲參數的名字:

using (BCDataContext db = new BCDataContext()) 
using (SqlConnection connection = new SqlConnection(db.Connection.ConnectionString)) 
using (SqlCommand command = connection.CreateCommand()) 
{ 
    command.CommandText = "sproc_FindFoundries"; 
    command.CommandType = CommandType.StoredProcedure; 

    command.Parameters.Add("@materials", SqlDbType.VarChar, 1000).Value = materialList; 
    command.Parameters.Add("@capabilities", SqlDbType.VarChar, 1000).Value = capabilityList; 

    DataSet ds = new DataSet(); 
    using (SqlDataAdapter da = new SqlDataAdapter(command)) 
    { 
     da.Fill(ds); 
    } 
} 
+1

我一直在使用LINQ和Entity Framework的時間太長了。我忘了指定命令類型。我是個白癡,哈哈。 ;) – 2011-02-04 19:58:25

4

命名時的參數,你需要把@在

SqlParameter prmMaterials = new SqlParameter("@materials", SqlDbType.VarChar, 1000) 
2

你在呼喚你的參數 「材料」 和 「能力」而不是「@materials」和「@capabilities」

1

我試過這樣的,它的工作對我來說:

int deal_id = 25; 
_dbContext.Database.ExecuteSqlCommand("exec sp_getdeal @deal_id={0}", deal_id); 

我的程序是這樣的:

ALTER PROCEDURE [dbo].[sp_getdeal] 
(
    @deal_id INTEGER 
) 
AS 
BEGIN 
相關問題