Источник данных имеет недопустимый тип.Это должен быть IListSource, IEnumerable или IDataSource - PullRequest
1 голос
/ 14 октября 2010

Я обновляю сайт .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 ]

1 голос
/ 14 октября 2010

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

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().

0 голосов
/ 18 июня 2013

Это «DAAB 5 вещь».

Согласно "ctavares" в CodePlex:

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

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

...