如何使用 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。您不使用 DataReaderDataTable 读取数据 - 您遍历 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

如何从 dataReader 列中读取 Xml 值

映射如何通过 .NET 中的 DataReader 通过 Load() 将数据读取到 DataTable?

Datareader 执行动态计算

.Net 的 SQLite:Datareader 关闭方法太慢

如何使用 c# datareader 和存储过程从 spl server 2012 数据表更新单个记录?