如何使用 datareader 从数据表中读取
Posted
技术标签:
【中文标题】如何使用 datareader 从数据表中读取【英文标题】:how read with datareader from datatable 【发布时间】:2012-02-16 14:43:32 【问题描述】:我有一个返回数据表的函数
DataTable dt = GetAllObject(ogj_id);
现在我想填写一个MultiCheckCombo,下面是我得到这个MultiCheckCombo的链接
MultiCheckCombo Reference
上面链接中如何填充这个MultiCheckCombo的例子只有dataReader
OdbcConnection con = "get YOUR connection string";
con.Open();
OdbcCommand cmd = new OdbcCommand();
cmd.Connection = con;
cmd.CommandText = "select text,id from ...........";
OdbcDataReader dr = cmd.ExecuteReader();
MultiCheckCombo1.ClearAll();
dr.Read();
MultiCheckCombo1.AddItems(dr, "text", "id");
查询 - 现在我的问题听起来是这样的:如何将DataTable
转换为dataReader
来填充这个MultiCheckCombo
?
【问题讨论】:
问题是它没有很好的界面。使用 arraylist 方法可能会更好,但这似乎不允许您分别指定 text 和 id 。我建议修改他们的代码以允许传入某种可枚举的值,然后将其用作数据源......但这并不能真正回答你的问题。 :) 没有将DataTable
转换为DataReader
这样的事情。它们是不同的东西,在不同的情况下使用。看这里:msdn.microsoft.com/en-us/library/haa3afyz%28v=vs.90%29.aspx
在幕后我认为.NET 使用DataReader
来填充DataTable
。你基本上会从一个转换到另一个然后再转换回来:)
@dana:.NET 可以做到这一点,但您可以很容易地拥有一个从未靠近 DataReader 的 DataTable。 anderson.pimentel:它们是不同的,但没有理由不能在具有 IDataReader 接口或类似接口的对象中公开 DataTable 中的信息。它只是不是很明智。 :)
【参考方案1】:
找到不同的控件。那个被硬编码为使用OdbcDataReader
。您不使用 DataReader
从 DataTable
读取数据 - 您遍历 DataRows
。
作为一种解决方法,您可以重载 AddItems 以接受 DataTable:
public void AddItems(DataTable dt, string textField, string valueField)
ClearAll();
int i = 0;
foreach (DataRow dr in dt.Rows)
chkList.Items.Add(dr[textField].ToString());
chkList.Items[i].Value = dr[valueField].ToString();
i++;
【讨论】:
【参考方案2】:您无法将数据阅读器转换为数据表。您必须遍历表的内容并手动构建每个项目。我不熟悉这个特定的控件,但如果它遵循正常的约定,它应该看起来像这样:
foreach(DataRow row in dt.Rows)
MultiCheckCombo1.Items.Add(new ListItem(dt["text"], dt["id"]));
【讨论】:
以上是关于如何使用 datareader 从数据表中读取的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 DataReader 读取数据库记录并将其添加到 DataTable
映射如何通过 .NET 中的 DataReader 通过 Load() 将数据读取到 DataTable?