数据源的类型无效。它必须是IListSource,IEnumerable或IDataSource

时间:2010-10-14 16:10:32

标签: .net daab

我正在将使用Enterprise Library版本2(主要是DAAB)的.NET 2.0站点升级到.NET版本3.5和EntLib版本5.我已经做了必要的更改,现在我收到错误“数据source是无效类型。它必须是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 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

这是“DAAB 5件事”。

根据CodePlex的“ctavares”:

“这是一个错误修复。在Entlib 3.0中,我们添加了对System.TransactionScope的支持。事实证明我们做错了,并且在负载下的大型系统中导致了一些间歇性故障。到了这个bug花费一些大的时候公司在解决问题方面花了不少钱,他们最终完全从他们的系统中删除了entlib。部分修复要求我们引用我们拥有的数据库连接计数,以便我们不会关闭它们直到它们'不再使用(这是bug)。因此,我们需要包装数据读取器,以便我们可以正确检测读取器何时关闭并正确管理我们的连接。这个bug实际上是在codeplex上发布的,但是我忘记了工作项目编号。“

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