Код работал правильно около 1 часа назад (и все еще работает правильно в тестовой базе данных).
public static int ExecuteNonQuery(String pCommand, CommandType pCommandType, ref OracleParameter[] pParameters)
{
int retVal = 0;
using (OracleConnection connection = ConnectToDB())
{
using (OracleCommand command = connection.CreateCommand())
{
command.CommandType = pCommandType;
command.CommandText = pCommand.ToString();
if (pParameters != null)
{
command.Parameters.AddRange(pParameters);
}
retVal = command.ExecuteNonQuery();
DataTable dt = null;
command.Parameters.Cast<OracleParameter>()
.Where(
p =>
p.Value != DBNull.Value &&
p.Direction == ParameterDirection.Output &&
p.OracleType == OracleType.Cursor)
.ToList()
.ForEach(p =>
{
dt = new DataTable();
dt.Load((p.Value as OracleDataReader));
p.Value = dt;
});
}
}
return retVal;
}
, но теперь он работает неправильно, при dt.Load линия зависает.Нет никаких известных изменений в запросе и в коде.Тот же SQL-запрос, тот же исходный код, но поведение отличается.
Результат SQL-запроса содержит 658 строк.Мы не думаем, что речь идет о подсчете данных, но пытались увеличить количество данных с одного шага с условием ROWNUM , и оно начало работать правильно.В конце ROWNUM <10000 </strong> - это временное решение для нас, но мы до сих пор не понимаем, почему оно зависает на линии dt.Load.