Метод DataTable Load зависает или нет по SQL-запросу (с теми же данными) - PullRequest
0 голосов
/ 12 февраля 2019

Код работал правильно около 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...