Процедура обновления 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
Он обновляет все записи, потому что вы сказали ему это сделать. В чем именно заключается Ваш вопрос?