Member 7969814 Ответов: 0

Процедура обновления Mysql обновляет все строки при изменении имени параметра она возвращает ошибку


Привет Друзья,
Моя процедура Sql обновляет все строки в таблице, созданной из одной строки, когда я изменяю имя параметра, она возвращает ошибку
Parameter '_DetailId' not found in the collection.


это моя процедура в магазине

CREATE DEFINER=`root`@`localhost` PROCEDURE `Sp_DetailsUpdate`(
 in DetailId int(11),
 in FreightContractId int(11), 
 in LSource varchar(100), 
 in Destination varchar(100), 
 in Qty varchar(50), 
 in Rate decimal(10),
 in FreightBasis varchar(50), 
 in VehicleType varchar(50), 
 in Dist_In_Kms varchar(50), 
 in Lead_Hours varchar(30), 
 in Remarks varchar(100), 
 in S_ID int(11), 
 in D_ID int(11)

)
IF EXISTS (select 1=1 From freightcontractdetails where DetailId=DetailId and FreightContractId=FreightContractId) then
  begin
    Update freightcontractdetails set LSource=LSource, Destination=Destination, Qty=Qty, Rate=Rate, FreightBasis=FreightBasis, VehicleType=VehicleType, Dist_In_Kms=Dist_In_Kms, Lead_Hours=Lead_Hours, Remarks=Remarks, S_ID=S_ID, D_ID=D_ID where  DetailId=DetailId and  FreightContractId=FreightContractId;
  end;
else
  begin
  Insert into freightcontractdetails (FreightContractId, LSource, Destination, Qty, Rate, FreightBasis, VehicleType, Dist_In_Kms, Lead_Hours, Remarks, S_ID, D_ID) Values ( _FreightContractId, LSource, Destination, Qty, Rate, FreightBasis, VehicleType, Dist_In_Kms, Lead_Hours, Remarks, S_ID, D_ID );
  end;
End if


я использую mysql 5.7 и asp.net 4.0

Что я уже пробовал:

следующие изменения дают параметр ошибки '_DetailId', не найденный в коллекции.

CREATE DEFINER=`root`@`localhost` PROCEDURE `Sp_DetailsUpdate`(
 in _DetailId int(11),
 in _FreightContractId int(11), 
 in LSource varchar(100), 
 in Destination varchar(100), 
 in Qty varchar(50), 
 in Rate decimal(10),
 in FreightBasis varchar(50), 
 in VehicleType varchar(50), 
 in Dist_In_Kms varchar(50), 
 in Lead_Hours varchar(30), 
 in Remarks varchar(100), 
 in S_ID int(11), 
 in D_ID int(11)

)
IF EXISTS (select 1=1 From freightcontractdetails where DetailId=_DetailId and FreightContractId=_FreightContractId) then
  begin
    Update freightcontractdetails set LSource=LSource, Destination=Destination, Qty=Qty, Rate=Rate, FreightBasis=FreightBasis, VehicleType=VehicleType, Dist_In_Kms=Dist_In_Kms, Lead_Hours=Lead_Hours, Remarks=Remarks, S_ID=S_ID, D_ID=D_ID where  DetailId=_DetailId and  FreightContractId=_FreightContractId;
  end;
else
  begin
  Insert into freightcontractdetails (FreightContractId, LSource, Destination, Qty, Rate, FreightBasis, VehicleType, Dist_In_Kms, Lead_Hours, Remarks, S_ID, D_ID) Values ( _FreightContractId, LSource, Destination, Qty, Rate, FreightBasis, VehicleType, Dist_In_Kms, Lead_Hours, Remarks, S_ID, D_ID );
  end;
End if


public void Update_FCD(int _FreightContractId, string LSource, string Destination, string Qty, decimal Rate, string FreightBasis, string VehicleType, string Dist_In_Kms, string Lead_Hours, string Remarks, int S_ID, int D_ID, int _DetailId)
       {
           //String Sql = "Update freightcontractdetails set LSource=@LSource, Destination=@Destination, Qty=@Qty, Rate=@Rate, FreightBasis=@FreightBasis, VehicleType=@VehicleType, Dist_In_Kms=@Dist_In_Kms, Lead_Hours=@Lead_Hours, Remarks=@Remarks, S_ID=@S_ID, D_ID=@D_ID where  DetailId=@DetailId and  FreightContractId=@FreightContractId";

           con.Open();
           Cmd = new MySqlCommand("Sp_DetailsUpdate", con);
           Cmd.CommandType = CommandType.StoredProcedure;
           Cmd.Parameters.AddWithValue("@FreightContractId", _FreightContractId);
           Cmd.Parameters.AddWithValue("@LSource", LSource);
           Cmd.Parameters.AddWithValue("@Destination", Destination);
           Cmd.Parameters.AddWithValue("@Qty", Qty);
           Cmd.Parameters.AddWithValue("@Rate", Rate);
           Cmd.Parameters.AddWithValue("@FreightBasis", FreightBasis);
           Cmd.Parameters.AddWithValue("@VehicleType", VehicleType);
           Cmd.Parameters.AddWithValue("@Dist_In_Kms", Dist_In_Kms);
           Cmd.Parameters.AddWithValue("@Lead_Hours", Lead_Hours);
           Cmd.Parameters.AddWithValue("@Remarks", Remarks);
           Cmd.Parameters.AddWithValue("@S_ID", S_ID);
           Cmd.Parameters.AddWithValue("@D_ID", D_ID);
           Cmd.Parameters.AddWithValue("@DetailId", _DetailId);

           Cmd.ExecuteNonQuery();
           con.Close();

       }

Richard Deeming

Имя параметра в коде C# должно совпадать с именем параметра в хранимой процедуре. Если вы измените параметр хранимой процедуры на _DetailId, то вам также нужно изменить имя в вашем коде C#.

Member 7969814

да вы правы в этом и есть проблема большое спасибо

ZurdoDev

Он обновляет все записи, потому что вы сказали ему это сделать. В чем именно заключается Ваш вопрос?

0 Ответов