2010-09-09 82 views
3

我有一个数据库事情的问题。存储的Proc必须用3或4个参数调用。如果没有给出ImageID,那么它必须 进入If循环并执行。如果给出ImageID,则执行存储过程的else部分。但我不知道这是为什么显示 过程或函数“”期望参数“@ImageID”,但未提供。”过程或函数“”期望参数'',这是不提供的

由于提前

if (!hasImage) 
{ 
    parameters = new SqlParameter[] 
    { 
     new SqlParameter("@LocationID", LocationID), 
     new SqlParameter("@PrimaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[0])), 
     new SqlParameter("@SecondaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[1])) 
    }; 

    SqlHelper.ExecuteNonQuery(
     DbConnString, 
     System.Data.CommandType.StoredProcedure, 
     "TempUpdateMerchantCategories_Insert", 
     parameters); 
} 
else 
{ 
    parameters = new SqlParameter[] 
    { 
     new SqlParameter("@LocationID", LocationID), 
     new SqlParameter("@PrimaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[0])), 
     new SqlParameter("@SecondaryID", 
      Convert.ToInt32(CategoryList[i].ToString().Split(',')[1])), 
     new SqlParameter("@ImageID", 
      Convert.ToInt64(ImageData[j].ToString().Split(',')[0])) 
    }; 
    SqlHelper.ExecuteNonQuery(
     DbConnString, 
     System.Data.CommandType.StoredProcedure, 
     "TempUpdateMerchantCategories_Insert", 
     parameters);  
} 

存储的过程是这样的。

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] 
(
@LocationID BIGINT, 
@PrimaryID INT, 
@SecondaryID INT, 
@ImageID BIGINT) 

AS 
BEGIN 

if (@ImageID is null) 

BEGIN 
SET NOCOUNT ON; 

INSERT INTO TempMerchant_Location_Category(

LocationID, 
PrimaryID, 
SecondaryID) 

VALUES (
@LocationID, 
@PrimaryID, 
@SecondaryID) 

END 

ELSE 

BEGIN 
SET NOCOUNT ON; 

INSERT INTO TempMerchant_Location_Category( 
LocationID, 
PrimaryID, 
SecondaryID, 
ImageID) 

VALUES(
@LocationID, 
@PrimaryID, 
@SecondaryID, 
@ImageID) 

END 
END 
+0

令人惊叹!多于1个答案。谢谢大家! – Ram 2010-09-09 13:13:47

回答

9

创建PROC这样在这种情况下

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] 
(@LocationID BIGINT, 
@PrimaryID INT, 
@SecondaryID INT, 
@ImageID BIGINT = null) 

这将使图像标识的可选参数

0

良好,没有默认值,预计一些价值

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] (@LocationID BIGINT, @PrimaryID INT, @SecondaryID INT, @ImageID BIGINT = null) 
0

你必须通过代码@ImageID参数,否则你可以在你的存储过程中有默认值@ImageID。

like @ImageID BIGINT = null

相关问题