是否可以在DataTable或DataRows上使用IDataReader?

时间:2012-10-31 08:41:41

标签: c# asp.net datarow idatareader

我有一个使用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作为数据源。情况是我提供了一个自定义构建的DataTable,它具有完全相同的格式(相同的列),就像它来自SQL查询一样,但它不是来自任何外部数据源。我想循环遍历DataTable的行,并且每行都以与上面的FillDataItem()方法相同的方式填充对象。

当然,我可以创建一个重载的新方法,将DataRow作为参数:

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

但是这与IDataReader版本非常相似,我真的很想知道如何在一个方法中实现我的目标,这样就不需要复制这样类似的代码了。考虑到我有很多字段,FillDataItem方法就像200行一样。将其复制/粘贴到DataRow版本似乎很浪费,难以维护。

1 个答案:

答案 0 :(得分:3)

数据表上有一个CreateDataReader方法。您可以使用它将datareader传递给现有代码。

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