Në përgjigjen e një pyetjeje të mëparshme këtu, më këshilluan të pyesja edhe për këtë çështje të lidhur.
Kohë pas kohe, kodi i gjenerimit të raportit që kam hedh dy përjashtime (ato nuk i shfaqen përdoruesit dhe ata mendojnë se gjithçka është e çuditshme), por më dërgohen me email.
E para është, "Përfundimi i kohës ka skaduar. Periudha e skadimit të kohës ka kaluar përpara përfundimit të operacionit ose serveri nuk po përgjigjet."
...dhe ai që gjithmonë pason shpejt pas kësaj është, "Nuk mund ta gjej tabelën 0"
Mesazhi i parë i përjashtimit mendon se rreshti i fundit i kodit në seksionin e "provës" ("new SqlDataAdapter(cmd). Fill(ds);") në metodën e mëposhtme po hedh përjashtimin:
public static DataTable ExecuteSQLReturnDataTable(string sql,
CommandType cmdType, params SqlParameter[] parameters)
{
using (var ds = new DataSet())
{
using (var connStr = new SqlConnection(CPSConnStr))
{
using (var cmd = new SqlCommand(sql, connStr))
{
cmd.CommandType = cmdType;
cmd.CommandTimeout = EXTENDED_TIMEOUT;
foreach (var item in parameters)
{
cmd.Parameters.Add(item);
}
try
{
cmd.Connection.Open();
new SqlDataAdapter(cmd).Fill(ds);
}
catch (Exception ex)
{
RoboReporterConstsAndUtils.HandleException(ex);
}
return ds.Tables[0];
}
}
}
}
Mesazhi i dytë i përjashtimit pretendon se ai buron nga rreshti i fundit domethënës në metodën e mësipërme ("kthimi ds.Tables[0];") si dhe nga ky:
var dtFillRateResults =
RoboReporterSQL.ExecuteSQLReturnDataTable
(FILL_RATE_BY_DISTRIBUTOR_BY_CUSTOMER_STORED_PROC,
CommandType.StoredProcedure,
new SqlParameter()
{
ParameterName = "@Unit",
SqlDbType = SqlDbType.VarChar,
Value = _unit
},
new SqlParameter()
{
ParameterName = "@Member",
SqlDbType = SqlDbType.VarChar,
Value = _memberId
},
new SqlParameter()
{
ParameterName = "@BegDate",
SqlDbType = SqlDbType.DateTime,
Value = Convert.ToDateTime(_dateBegin)
},
new SqlParameter()
{
ParameterName = "@EndDate",
SqlDbType = SqlDbType.DateTime,
Value = Convert.ToDateTime(_dateEnd)
}
);
FILL_RATE_BY_DISTRIBUTOR_BY_CUSTOMER_STORED_PROC është një Proc i ruajtur që përdoret diku tjetër dhe përpara përpjekjeve dhe aktiviteteve të mia këtu, kështu që nuk është vetë PS-ja që e shkakton problemin.
Për super kuriozët, thirrja e metodës me porosi nga kodi i mësipërm është:
public static DataTable ExecuteSQLReturnDataTable(string connectionStr,
string sql, CommandType cmdType, params SqlParameter[] parameters)
{
using (var ds = new DataSet())
{
using (var connStr = new SqlConnection(connectionStr))
{
using (var cmd = new SqlCommand(sql, connStr))
{
cmd.CommandType = cmdType;
cmd.CommandTimeout = EXTENDED_TIMEOUT;
foreach (var item in parameters)
{
cmd.Parameters.Add(item);
}
try
{
cmd.Connection.Open();
new SqlDataAdapter(cmd).Fill(ds);
}
catch (Exception ex)
{
RoboReporterConstsAndUtils.HandleException(ex);
return null;
}
return ds.Tables[0];
}
}
}
}