【问题标题】:How to handle multiple rows from SQL select query in C#?如何在 C# 中处理来自 SQL 选择查询的多行?
【发布时间】:2014-03-26 12:48:08
【问题描述】:

我有一个简单的 C# windows 窗体,其中有 6 个文本框。现在我有一个返回 3 行的 SQL 查询(它总是返回 3 行 - 查询从联结表和另一个表中获取数据)并且每行有 2 列(名称和电子邮件)。我想要做的是用sql查询的结果填充这6个文本框,如Name 1Email 1应该得到row 1的值,Name 2Email 2应该得到row 2的值等等等等。

我在这里和那里搜索过,但我无法找到解决方案,所以请帮助我。我知道我需要在这里应用一些循环,但我无法在这里找到逻辑。

图片供参考:

SQL查询结果:

C# 获胜表格:

代码(显然不是这样做的方法):

        SqlDataReader rdr = null;
        SqlConnection con = null;
        SqlCommand cmd = null;
        String Name;
        String Email;
        string ConnectionString = "// my connection string...";
        con = new SqlConnection(ConnectionString);
        con.Open();
        string CommandText = "//sql query goes here";
         cmd = new SqlCommand(CommandText);
         cmd.Connection = con;
        rdr = cmd.ExecuteReader();
        while(rdr.Read())
          {
                  Name = rdr["Name"].ToString(); 
                 Email = rdr["Email"].ToString();
          }

        con.Close();

【问题讨论】:

  • 你真的应该使用转发器控件来处理类似数据的列表。
  • 请向我们展示您如何检索数据的代码
  • 如果只有 3 组,您也可以硬编码控件名称。抽象(即控制循环)并没有真正为您带来太多收益。
  • @Aron 中继器控制不是只有asp吗?

标签: c# sql winforms


【解决方案1】:

创建两个文本框数组

 TextBox[] names = new TextBox[] {txtName1, txtName2, txtName3};     
 TextBox[] mails = new TextBox[] {txtMail1, txtMail2, txtMail3};

现在在为您的表格检索阅读器之后

int idx = 0;
while(reader.Read() && idx < names.Length)
{
    names[idx].Text = reader.GetString(0);
    mails[idx].Text = reader.GetString(1);
    idx++;
}

当然,这个解决方案受到您的声明的严格限制:它总是会返回 3 行

【讨论】:

  • 谢谢先生,您刚刚解决了我的问题。我不敢相信我没有想到数组 - 我真是太愚蠢了......
  • 如果我想在DataGridView 中做同样的事情怎么办?我在DataGridView 中添加了三列,想要显示 Name1、Name2 和 Name3。
  • 将 DataGridView 绑定到 DataTable。容易多了
【解决方案2】:

您可以将查询结果放入DataTable。稍后您可以设置文本框以在 DataTable 的每一行上显示数据。

【讨论】:

    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多