首页 > 解决方案 > 您可以多次使用 sqlDataReader 吗?

问题描述

我有一个问题,我想我已经知道答案了;您可以多次使用 sqlDataReader 吗?

我有一个运行的查询,它的输出当前绑定到一个中继器。我得到了预期的结果,一切都运行良好。我现在面临的挑战是我想使用相同的结果,但不是将它们列出在中继器中,而是希望将它们加载到 DropDownList 中。我已经尝试“连续”两次使用 sqlDataReader,但我猜一旦 Reader 到达终点,就没有什么可以填充 DDL 了吗?

这是不起作用的代码。

sqlCmd = new SqlCommand("SELECT CountryName From CountryList");
sqlCmd.CommandType = System.Data.CommandType.Text;
sqlCmd.Connection = myConnection;
sqlReader = sqlCmd.ExecuteReader();
if (sqlReader.HasRows)
{
    RepeaterCountries.DataSource = sqlReader;
        RepeaterCountries.DataBind();

        DDLCountry.DataSource = sqlReader;
        DDLCountry.DataTextField = "CountryName";
        DDLCountry.DataValueField = "CountryName";
        DDLCountry.DataBind();
}

有没有一种方法可以实现这一点,我不必再次对数据库运行另一个查询?关于将结果放入数组或类似的东西是否可行的任何建议?

标签: c#.net

解决方案


你不能。

数据阅读器是 TDS 协议的一个小包装器,它是从服务器发送的仅转发数据集。

数据读取器不保留数据的副本,并且sql server不允许重置数据集(这也是不记得了),所以你不能只是在数据中移动回来。

您要么必须在内部缓冲,要么必须再次发送 sql。


推荐阅读