К концу моего кода я вызываю хранимую процедуру, которая обновляет таблицу на основе параметров, переданных моей страницей. Я получаю следующее сообщение об ошибке:Процедура ожидает параметр, который не был отправлен
Procedure or function 'Res_invpush_UpdateInv' expects parameter '@InventoryPushSubscriptionId', which was not supplied.
Даже думал, что мое значение параметра успешно прошло - я знаю это, потому что я испытал с помощью контрольных точек, и когда я мыши над на параметре упомянуто, что дает значение 1, так я не Не знаю, почему сообщение все еще идет.
Может кто-нибудь, пожалуйста, покажите мне, где именно я ошибаюсь или как это исправить?
SendInvUpdate.InvServices.UpdateRatePackagesRequest ur = new SendInvUpdate.InvServices.UpdateRatePackagesRequest();
SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse or = new SendInvUpdate.InvServices.UpdateRatePackagesOperationResponse();
protected void Page_Load(object sender, EventArgs e)
{
try
{
string connStr = ConfigurationManager.ConnectionStrings["bb"].ConnectionString;
SqlConnection Con = new SqlConnection(connStr);
Con.Open();
SqlCommand cmd = new SqlCommand("invpush_PollForAvailableChanges", Con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter NewSysChangeVersionParam = new SqlParameter("@NewSysChangeVersion", SqlDbType.Int);
NewSysChangeVersionParam.Value = (object)NewSysChangeVersionParam ?? DBNull.Value;
NewSysChangeVersionParam.Direction = ParameterDirection.InputOutput;
NewSysChangeVersionParam.SqlDbType = SqlDbType.BigInt;
SqlDataReader sdr = cmd.ExecuteReader();
InventoryPushSubscriptionRecord rec = new InventoryPushSubscriptionRecord();
while (sdr.Read())
{
rec.InventoryPushSubId = sdr.GetInt32(0);
rec.CMName = sdr.GetString(1);
rec.NotifUrl = sdr.GetString(2);
rec.Options = sdr.GetString(3);
rec.LastSysChangeVersion = sdr.IsDBNull(4)?(long?)null:sdr.GetInt32(4);
}
if(!sdr.NextResult()) throw new System.Exception("Expected Result set 1 for InventoryChangeRecord");
InventoryChangeRecord inrec = new InventoryChangeRecord();
while (sdr.Read())
{
inrec.InventoryPushSubId= sdr.GetInt32(0);
inrec.SysChangeVersion=sdr.IsDBNull(1)?(long?)null:sdr.GetInt32(1);
inrec.InvDate=sdr.GetDateTime(2);
inrec.ResId=sdr.GetInt32(3);
inrec.RoomType=sdr.GetString(4);
inrec.InvCount=sdr.GetInt32(5);
inrec.ResName=sdr.GetString(6);
}
sdr.Close();
sdr.Dispose();
if (NewSysChangeVersionParam != null)
{
SendInvUpdate.InvServices.InventoryServiceClient isc = new SendInvUpdate.InvServices.InventoryServiceClient();
or = isc.UpdateRatePackages(request);
res = or.Results.ToString();
int Subid;
SubId=inrec.InventoryPushSubscriptionId;
SqlCommand ucmd = new SqlCommand("Res_invpush_UpdateInv", Con);
ucmd.CommandType = CommandType.StoredProcedure;
SqlParameter LastChange = new SqlParameter("@NewLastSysChangeVersion", SqlDbType.Int);
LastChange.Value = NewSysChangeVersionParam;
SqlParameter SubscriptionId = new SqlParameter("InventoryPushSubscriptionId", SqlDbType.Int);
SubscriptionId.Value = SubId;
ucmd.ExecuteNonQuery();
}
}
}
}
catch (Exception ex)
{
throw (ex);
}
}
}
TL; DR. Пожалуйста, упростите этот пример. Делает помощь легче. – usr
Никто не хочет тралить через такое количество кода. http://www.sscce.org – spender
Вы несовместимы в своем параметре, именовав его внешний вид. Некоторые из ваших параметров передаются из вашего кода C# с помощью «@», а некоторые - нет. Я подозреваю, что ваша проблема в том, что вы перекрестились с этим параметром. –