Источник данных имеет недопустимый тип. Это должен быть IListSource, IEnumerable или IDataSource

Я обновляю сайт.NET 2.0, который использует Enterprise Library версии 2 (главным образом, DAAB), до.NET версии 3.5 и EntLib версии 5. Я внес необходимые изменения, и теперь я получаю сообщение об ошибке "Источник данных неверный тип. Это должен быть IListSource, IEnumerable или IDataSource ". Я получаю эту ошибку при попытке установить источник данных элемента управления DevExpress ASPxGridView в IDataReader.

Ниже мой код. Наше приложение широко использует IDataReaders.... все эти экземпляры нужно будет изменить? Я видел здесь одну статью, в которой говорилось о добавлении.ToList() в конец источника данных, но это недопустимый метод в IDataReader. Обратите внимание, что хотя этот конкретный файл является C#, 99% нашего приложения написано на VB.NET.

private void GetRecentAddedCasesGridData()
    {
        dbReader = DAL.GetRecentAddedCases(iClientKey);
        if (dbReader != null)
        {
            GridRecentAddedCases.DataSource = dbReader;
            GridRecentAddedCases.DataBind();         
        }
        dbReader.Close();
        dbReader.Dispose();
        dbReader = null;
    }

2 ответа

Попробуйте этот метод расширения

public static IEnumerable<object[]> AsEnumerable(this IDataReader reader)
{
    while (reader.Read())
    {
        var ret = new object[reader.FieldCount];
        reader.GetValues(ret);
        yield return ret;
    }
}

Тогда вы можете написатьGridRecentAddedCases.DataSource = dbReader.AsEnumerable(),

Это "DAAB 5 вещь".

По словам "ctavares" в CodePlex:

"Это было исправлением ошибки. В Entlib 3.0 мы добавили поддержку System.TransactionScope. Оказалось, что мы сделали это неправильно и вызвали некоторые периодические сбои в больших системах под нагрузкой. До такой степени, что ошибка стоила некоторым крупным компаниям довольно потраченные деньги на выяснение проблемы, и в итоге они полностью удалили entlib из своей системы. Часть этого исправления требовала, чтобы мы делали подсчет ссылок на принадлежащие нам соединения с базой данных, чтобы мы не закрывали их, пока они не исчезнут. использовался дольше (что и являлось ошибкой). Поэтому нам нужно было обернуть считыватели данных, чтобы мы могли правильно определять, когда считыватель был закрыт и правильно управлять нашими соединениями. На самом деле ошибка была опубликована здесь, в кодекплексе, но я забыл рабочий элемент число. "

Источник: http://entlib.codeplex.com/discussions/211288

Другие вопросы по тегам