【问题标题】:C# Retrieve ALL SQL Query ResultsC# 检索所有 SQL 查询结果
【发布时间】:2020-07-21 20:55:51
【问题描述】:
else if (listBox1.SelectedIndex == 1)
{
    String sql2 = "SELECT FirstName, LastName FROM Players WHERE Team = 'Milwaukee Bucks'" +
                  "AND Number < 24";
    // command statement
    command = new SqlCommand(sql2, cnn);
    SqlDataReader reader = command.ExecuteReader();

    // Get table values
    if (reader.Read())
    {
        textBox1.Text = reader.GetString(0).ToString() + " " + reader.GetString(1).ToString();
    }
    cnn.Close();
    command.Dispose();
}

上面是我的代码的一部分。我有一个列表框,其中包含供用户选择的选项,根据选择的项目,显示按钮将运行查询并将结果返回到文本框。

但是,当我运行代码时,我只能得到一个结果。该查询返回了在雄鹿队中人数小于 24 的球员。应该有多个,但我在 C# 应用程序中只得到一个。

【问题讨论】:

  • 您需要执行 while(reader.Read()),但这会在每次循环迭代时覆盖 textBox1,所以我认为这不是完整的解决方案。
  • SqlDataReader 会进行连续读取,因此每次调用 reader.Read() 都会返回下一条记录
  • 这个答案 (How do I fill a DataTable using DataReader) 给出了加载所有数据的替代方法的示例
  • 顺便说一句,如果您对列表中的每个项目都有一个if else,那么您做错了。您可以动态获取所选列表项并将其值用作查询中的参数。
  • 我确实有多个 if else's。我不知道如何更有效地做到这一点,你能解释一下吗?

标签: c# sql sql-server


【解决方案1】:

您需要使用 while 循环来读取所有行而不是读取单行(通过 Read())。

Microsoft Documentation 有一个如何使用 while 循环的示例。

StringBuilder sb = new StringBuilder()
while (reader.Read())
{
    sb.AppendLine(reader.GetString(0).ToString() + " " + reader.GetString(1).ToString());
}
textBox1.Text = sb.ToString();

【讨论】:

    猜你喜欢
    • 2011-11-01
    • 2012-02-29
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多