Процедура или функция "" ожидает параметр '', который не был предоставлен - PullRequest
4 голосов
/ 09 сентября 2010

У меня проблема с базой данных. Сохраненный 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

Ответы [ 3 ]

10 голосов
/ 09 сентября 2010

создайте свой процесс в таком случае

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

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

0 голосов
/ 09 сентября 2010

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

как @ImageID BIGINT = null

0 голосов
/ 09 сентября 2010

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

CREATE PROCEDURE [dbo].[TempUpdateMerchantCategories_Insert] ( @LocationID BIGINT, @PrimaryID INT, @SecondaryID INT, @ImageID BIGINT = null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...