【问题标题】:Stuck on storing individual rows from the sqlDataReader for later use坚持从 sqlDataReader 存储单个行以供以后使用
【发布时间】:2019-12-06 01:49:29
【问题描述】:

我正在使用 Visual Studio、Winforms 和集成的 SQL Server。

win 表单很简单,它包含一个文本框和 3 个按钮。

我在 SQL Server 中有两个表:

  • Questions&
  • Answers

我想将问题表中的问题加载到文本框中, 我希望将答案表中的 3 个答案加载到按钮文本中

我已经能够使用sqlDataReader 和使用

while Datareader.read() 
{
     txtBox.text = DataReader.getValue()

但是我一直无法阻止 dataReader 读取直到最后一个结果,我以 onload() 事件的形式调用 dataReader,因此我需要一种方法将结果流从 dataReader 保存到一个对象或列表,我可以访问它来制作一个简单的问答表单,在表单中也没有正确/错误的答案,只需选择一个选项即可显示上述 SQL Server 表中的下一行,任何帮助或建议非常感谢,如果这没有意义,对不起。

【问题讨论】:

  • 我认为您的代码甚至无法编译,因此停止 dataReader 并不是您最大的问题。请提供Minimal, Reproducible Example 并详细说明您卡在哪里。
  • 代码确实可以编译,上面的代码是我能想到的最简单的解决问题的方法,从数据读取器获取数据工作我只想将数据读取器的每一行存储在一个列表中或类似的东西,所以我可以根据需要访问,而不必每次我想要 sql 数据时都查询我的 sql 表,我收集我可能应该使用 while 循环来执行此操作,但我似乎无法弄清楚如何,我真的是 c# 新手,感谢您抽出宝贵时间发表评论。

标签: c# sql-server winforms sqldatareader


【解决方案1】:

您不想使用while 循环将问题放入文本框中。从您提供的代码片段来看,它似乎会快速遍历所有问题,最终只会显示最后一个问题。

创建几个成员变量:

public List<string> _questions = new List<string>();
public int _questionsIndex = 0;

在您的onload 事件中,将问题存储在列表中:

while Datareader.read() 
{
    _questions.Add(DataReader.getValue());

然后显示第一个问题并增加您的索引:

txtBox.text = _questions[_questionIndex];
_questionIndex++;

现在,当您下次准备展示新问题时,您只需要做同样的事情:

txtBox.text = _questions[_questionIndex];
_questionIndex++;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2011-10-21
    相关资源
    最近更新 更多