2010-09-09 2 views
3

У меня проблема с базой данных. Сохраненный Proc должен вызываться с 3 или 4 параметрами. Если ImageID не указан, то он должен войти в цикл If и выполнить. если задан ImageID, выполните оставшуюся часть хранимой процедуры. Но я понятия не имею, почему это показывающую процедура или функция «» ожидает параметр «@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

Amazing !! Более 1 ответа. Спасибо всем! – Ram

ответ

9

создать процедурный, как это в том случае,

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

Это сделает ImageID необязательный параметр

0

хорошо без значения по умолчанию он ожидает, что какое-то значение

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

Вы должны передать параметр @ImageID через код или же вы можете иметь значение по умолчанию в хранимой процедуре @ImageID.

@ImageID BIGINT = null

Смежные вопросы