В ответ на предыдущий вопрос here, мне также посоветовали также задать вопрос об этой связанной проблеме.Почему я получаю «тайм-аут» и «Не могу найти таблицу 0» и какие превентивные меры имеются в моем распоряжении?
Через некоторое время в коде генерации отчетов у меня есть два исключения (они не отображаются пользователю, и они думают, что все это hunky dory), но я получаю их по электронной почте мне.
Первый, «Время ожидания истекло. Время ожидания истекло до завершения операции или сервер не отвечает.»
... и тот, который всегда следует быстро после этого есть " не можете найти таблицу 0 «
Первое сообщение Exeption полагает, что последняя строка кода в разделе Ьгу (» новый SqlDataAdapter (CMD) .Нанести (Ds); ") в приведенном ниже метод бросает исключение:
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];
}
}
}
}
Второе сообщение об исключении утверждает, что оно исходит из последней значимой строки в вышеописанном методе («return ds.Tables [0]; «), а также это один:
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 является ХП, который используется в других местах и до моих усилий и деятельности здесь, так что это не сам SP, что вызывает проблему
.Для супер-любопытно, сделанный на заказ вызова метода из приведенной выше коды:
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];
}
}
}
}