C#WinForm - 比较带有列表框内容的DataReader并显示匹配项

时间:2013-05-16 00:56:38

标签: c# winforms sqldatareader

我正在尝试解决一个项目,我从SQL数据库中提取一列数据,并将数据与列表框中的值进行比较。到目前为止,它正在寻找一个比较,但只返回一个值,即使在列表框中有多个匹配项。

我在这里做错了什么?感谢任何人提供的任何帮助。

    private void btnDoAudit_Click(object sender, EventArgs e)
    {
        string respName = "something";
        SqlDataReader reader = null;

        using (SqlConnection conn = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=XXXX;Integrated Security=True;;User Instance=True"))
        {
            using (SqlCommand command = new SqlCommand("SELECT [Responsibility_Name] FROM [tblResponsibility] WHERE [Sensitive_Transaction]='TRUE'", conn))
            {
                conn.Open();

                reader = command.ExecuteReader();

                while (reader.Read())
                {
                    respName = (string)reader["Responsibility_Name"];



                        if (lstResponsibilities.Items.Contains(respName) == true)
                        {
                          txtResults.Text = respName;
                        }

                }
                reader.Close();
                conn.Close();
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

每次找到匹配项时,您都会覆盖txtResults.Text。你可以改为追加:

txtResults.Text += respName;

或者你可能只是将匹配列表保留在列表中,然后将它们加入到更清晰的内容中。你可以把它放在方法的顶部,你要声明其他变量:

List<string> matches = new List<string>();

然后,您只需执行以下操作:

,而不是设置txtResults.Text
matches.Add(respName);

一旦你完成了SqlConnection,在你的方法结束时,你可以将它们加入到一个漂亮的字符串中:

txtResults.Text = string.Join(", ", matches);

答案 1 :(得分:0)

在您的while语句中,每次找到匹配项时,都会覆盖以前的匹配项:

txtResults.Text = respName;

也许你想创建一个以逗号分隔的列表:

txtResults.Text += respName + ", ";

然后修剪最后一个逗号