Источник данных имеет недопустимый тип. Это должен быть 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 из своей системы. Часть этого исправления требовала, чтобы мы делали подсчет ссылок на принадлежащие нам соединения с базой данных, чтобы мы не закрывали их, пока они не исчезнут. использовался дольше (что и являлось ошибкой). Поэтому нам нужно было обернуть считыватели данных, чтобы мы могли правильно определять, когда считыватель был закрыт и правильно управлять нашими соединениями. На самом деле ошибка была опубликована здесь, в кодекплексе, но я забыл рабочий элемент число. "