Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 您可以多次使用sqlDataReader吗?_C#_.net - Fatal编程技术网

C# 您可以多次使用sqlDataReader吗?

C# 您可以多次使用sqlDataReader吗?,c#,.net,C#,.net,我有一个问题,我想我已经知道答案了;您可以多次使用sqlDataReader吗 我有一个我运行的查询,它的输出现在绑定到一个中继器。我得到了满意的结果,一切都很顺利。我现在面临的挑战是,我希望使用相同的结果,但不是将它们列在中继器中,而是将它们加载到DropDownList中。我已经“连续”两次尝试使用sqlDataReader,但我猜一旦读取器到达末尾,就没有什么东西可以填充DDL了 这是不起作用的代码 sqlCmd = new SqlCommand("SELECT CountryName F

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

我有一个我运行的查询,它的输出现在绑定到一个中继器。我得到了满意的结果,一切都很顺利。我现在面临的挑战是,我希望使用相同的结果,但不是将它们列在中继器中,而是将它们加载到DropDownList中。我已经“连续”两次尝试使用sqlDataReader,但我猜一旦读取器到达末尾,就没有什么东西可以填充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();
}
是否有一种方法可以实现这一点,从而不必再次对数据库运行另一个查询?关于将结果放入数组或类似的东西是否可行的任何建议?

不,您不能

数据读取器是TDS协议的一个小包装器,它是从服务器发送的一个仅向前的数据集

数据读取器不保留数据的副本,并且sql server不允许重置数据集(这也是不记得的),因此您不能仅在数据中向后移动


您要么需要内部缓冲,要么需要再次发送sql。

我认为最好创建一个列表,将国家名称添加到该列表中,而不是在需要的地方使用。谢谢,伙计。我将继续使用该方法。我很好奇是否有办法。TomTom对这个过程中发生的事情做了很好的解释,这让我很好奇。谢谢TomTom的解释。这实际上消除了我对这件事的好奇因素,即我是否可以。因此,我很高兴答案是我不能,因此我使用了另一种推荐的方法,将数据放入列表。例如,我建议您添加一个指向TDS的链接,以便其他人能够熟悉该协议