2010-10-14 103 views
1

我正在升级使用企业库版本2(DAAB主要)的.NET 2.0网站到.NET版本3.5和EntLib版本5.我已经做了必要的更改,现在我'出现错误'数据源的类型无效,它必须是IListSource,IEnumerable或IDataSource“。试图将DevExpress ASPxGridView控件的数据源设置为IDataReader时出现此错误。数据源的类型无效。它必须是一个IListSource,IEnumerable或IDataSource

以下是我的代码。我们的应用程序广泛使用IDataReader ....这些实例是否都需要修改?我在这里看到一篇文章说要将.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; 
    } 

回答

1

试试这个扩展方法

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

这是为什么改变必要???它是一个.NET Framework 3.5的东西它是一个DAAB 5件事? – Mike 2010-10-14 18:24:22

0

这是“DAAB 5的东西”。

据“ctavares”在CodePlex上:

“这是一个bug修复在Entlib 3.0,我们在很大程度上增加了System.TransactionScope支持事实证明我们做到了错了,造成了一定的间歇性故障。系统在加载的情况下,为了避免这些bug让一些大公司花费大量金钱来解决问题,他们最终将entlib从他们的系统中完全删除了,部分修复需要我们对数据库连接进行引用计数,我们拥有自己的产品,这样我们就不会关闭它们,直到它们不再被使用(这就是bug)。因此,我们需要包装数据读取器,以便正确地检测读者何时关闭并正确管理我们的连接。这个错误实际上是发布在codeplex的某处,但我忘了工作项目编号。 “

来源:http://entlib.codeplex.com/discussions/211288

相关问题