1

Enterprise Libraryバージョン2(主にDAAB)を使用する.NET 2.0サイトを.NETバージョン3.5およびEntLibバージョン5にアップグレードしています。必要な変更を加えたところ、「データソースは無効なタイプです。IListSource、IEnumerable、またはIDataSourceである必要があります。DevExpressASPxGridViewコントロールのデータソースを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 に答える