Процедура или функция «AddUpdateContactDetails» ожидает параметр «@Id», который не был предоставлен

у меня есть свой метод

 using (var helper = new DbHelper())
        {

            _commandText = "AddUpdateContactDetails";

            var parameter = new[]
                                {
                                    new SqlParameter("@Id", 0), // error here
                                    new SqlParameter("@CustomerId", id),
                                    new SqlParameter("@FirstName", customerDetails.FirstName),
                                    new SqlParameter("@LastName", customerDetails.LastName),
                                    new SqlParameter("@CompanyName", customerDetails.Company),
                                    new SqlParameter("@Designation", customerDetails.DesigId),
                                    new SqlParameter("@Title", customerDetails.Title),
                                    new SqlParameter("@Email", customerDetails.Email),
                                    new SqlParameter("@Phone", customerDetails.Phone),
                                };
            helper.ExecuteNonQuery(_commandText, CommandType.StoredProcedure, parameter);
        }

и Сп ниже

Alter Procedure AddUpdateContactDetails
(

@Id int,
@CustomerId int,
@FirstName varchar(50),
@LastName varchar(50),
@CompanyName varchar(150),
@Designation int,
@Title int,
@Email varchar(50),
@Phone varchar(50)
)
AS
    BEGIN
        IF @Id<=0
            BEGIN
                INSERT INTO CustomerDetails
                           (FirstName,CustomerId,LastName, CompanyName, Designation, Title,Email,Phone)
                     VALUES
                           (@FirstName,@CustomerId,@LastName,@CompanyName,@Designation,@Title,@Email,@Phone )

            END
        ELSE
            BEGIN
               UPDATE CustomerDetails
               SET FirstName= @FirstName ,
                  LastName= @LastName ,
                  CompanyName= @CompanyName ,
                  Designation= @Designation ,
                  Title= @Title ,
                  Email= @Email ,
                  Phone= @Phone 
                WHERE Id= @Id
            END

END

Но по-прежнему возникает исключение, что "Процедура или функция "AddUpdateContactDetails" ожидает параметр "@Id", который не был предоставлен."


person Community    schedule 10.08.2012    source источник
comment
вы используете там жестко закодированный ноль или у вас есть выражение в вашем коде?   -  person Shyju    schedule 10.08.2012
comment
@DJKRAZE ты имел в виду ИДЕНТИЧНОСТЬ? IDENTITY и PRIMARY KEY — это не одно и то же.   -  person Aaron Bertrand    schedule 10.08.2012
comment
@Shyju - я использовал Hardcoded Zero для проверки кода и для dj kraze - да, идентификатор - это идентификация, и pk тоже. Я использую if else для добавления/обновления с помощью одного запроса. Если id = 0, то вставьте еще, обновите идентификатор   -  person    schedule 10.08.2012
comment
Также сделайте Id IDENTITY, если это так, измените его на Auto Field в базе данных и установите его Not null = true и удалите @id из первого параметра.   -  person MethodMan    schedule 10.08.2012
comment
Решено, я заменил 0 на -1 .. спасибо   -  person    schedule 10.08.2012
comment
Амит, который кажется неправильным способом выполнения вставок и обновлений, можете ли вы показать, как вы назначаете @Id Жесткое кодирование значений на самом деле не решает проблему, поэтому все ваши строки будут иметь значение -1 для Id и @id.. .? возможно, я упустил что-то, что вы пропустили в своем фрагменте кода   -  person MethodMan    schedule 10.08.2012


Ответы (1)


Если эта таблица, которую вы обновляете или вставляете, не имеет IDENTITY , то ваши проблемы заключаются в этой строке кода.

IF @Id<=0
            BEGIN
                INSERT INTO CustomerDetails
                           (FirstName,CustomerId,LastName, CompanyName, Designation, Title,Email,Phone)
                     VALUES
                           (@FirstName,@CustomerId,@LastName,@CompanyName,@Designation,@Title,@Email,@Phone )

просто добавьте @id к значениям и идентификатору к вашей команде вставки, как это

IF @Id<=0
            BEGIN
                INSERT INTO CustomerDetails
                           (Id,FirstName,CustomerId,LastName, CompanyName, Designation, Title,Email,Phone)
                     VALUES
                           (@Id,@FirstName,@CustomerId,@LastName,@CompanyName,@Designation,@Title,@Email,@Phone )
person MethodMan    schedule 10.08.2012