1

我正在将使用 Enterprise Library 版本 2(主要是 DAAB)的 .NET 2.0 站点升级到 .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;
    }
4

2 回答 2

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

于 2010-10-14T16:15:04.743 回答
0

这是“DAAB 5 的事情”。

根据 CodePlex 的“ctavares”:

“这是一个错误修复。在 Entlib 3.0 中,我们添加了对 System.TransactionScope 的支持。事实证明我们做错了,并在负载下的大型系统中造成了一些间歇性故障。以至于该错误使一些大公司付出了相当大的代价花了一点钱解决了这个问题,他们最终从他们的系统中完全删除了 entlib。这个修复的一部分要求我们对我们拥有的数据库连接进行引用计数,这样我们就不会关闭它们,直到它们没有更长时间使用(这是错误)。因此,我们需要包装数据读取器,以便我们可以正确检测读取器何时关闭并正确管理我们的连接。错误实际上是在某个地方的 codeplex 上发布的,但我忘记了工作项数字。 ”

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

于 2013-06-18T18:15:26.280 回答