1

IDataReaderを使用してオブジェクトにデータを入力する関数があります。

private void FillDataItem(IDataReader datareader)
{
    this.CompanyCode = datareader.GetString(datareader.GetOrdinal("COMPANY"));
    this.Name = datareader.GetString(datareader.GetOrdinal("NAME"));
    //...and so on
}

これは、SqlDataReaderを使用して、SQLクエリの結果に基づいてオブジェクトのフィールドにデータを入力する場合に非常に便利です。ほとんどすべてのクラスには、IDataReaderを受け取るこの種の「FillDataItem」があります。データベースオブジェクトをコードに取り込むのが途方もなく簡単になります。

ただし、同じことを実行したいのですが、データソースとしてDataTableのDataRowを使用します。状況は、SQLクエリからのものとまったく同じ形式(同じ列)のカスタムビルドのDataTableが表示されますが、そのような外部データソースからのものではありません。DataTableの行をループし、各行で、上記のFillDataItem()メソッドと同じ方法でオブジェクトを入力します。

もちろん、DataRowをパラメーターとして受け取るオーバーロードされた新しいメソッドを作成することもできます。

private void FillDataItem(DataRow datarow)
{
    this.CompanyCode = datarow["COMPANY"].ToString();
    this.Name = datarow["NAME"].ToString();
    //...and so on
}

しかし、これはIDataReaderバージョンと非常に似ているため、このような類似のコードを複製する必要がないように、1つのメソッドで目標を達成する方法を本当に知りたいと思います。フィールドがたくさんあることを考えると、FillDataItemメソッドは200行の長さです。これをコピーしてDataRowバージョンに貼り付けるのは無駄であり、保守が難しいようです。

4

1 に答える 1

3

データテーブルにはCreateDataReaderメソッドがあります。これを使用して、データリーダーを既存のコードに渡すことができます。

http://msdn.microsoft.com/en-us/library/system.data.datatable.createdatareader.aspx

于 2012-10-31T08:46:39.053 に答える