我有一个使用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版本似乎很浪费,难以维护。
答案 0 :(得分:3)
数据表上有一个CreateDataReader方法。您可以使用它将datareader传递给现有代码。
http://msdn.microsoft.com/en-us/library/system.data.datatable.createdatareader.aspx