C#WinForm-将DataReader与列表框内容进行比较并显示匹配项
我试图处理一个项目,其中我从SQL数据库中提取一列数据,并将数据与列表框中的值进行比较。到目前为止,它正在查找比较,但只返回一个值,即使列表框中有多个匹配项 我做错了什么?谢谢任何人能提供的帮助C#WinForm-将DataReader与列表框内容进行比较并显示匹配项,c#,winforms,sqldatareader,C#,Winforms,Sqldatareader,我试图处理一个项目,其中我从SQL数据库中提取一列数据,并将数据与列表框中的值进行比较。到目前为止,它正在查找比较,但只返回一个值,即使列表框中有多个匹配项 我做错了什么?谢谢任何人能提供的帮助 private void btnDoAudit_Click(object sender, EventArgs e) { string respName = "something"; SqlDataReader reader = null;
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();
}
}
}
每次找到匹配项时,都会覆盖TXTRUSTS.Text。您可以改为附加:
txtResults.Text += respName;
或者,您更愿意将匹配列表保存在一个列表中,然后将它们合并到更清晰的内容中。您可以将其放在方法顶部附近,声明其他变量:
List<string> matches = new List<string>();
完成SqlConnection后,在方法末尾,可以将它们连接成一个漂亮的字符串:
txtResults.Text = string.Join(", ", matches);
在while语句中,每次找到匹配项时,都会覆盖以前的匹配项:
txtResults.Text = respName;
也许您想创建一个逗号分隔的列表:
txtResults.Text += respName + ", ";
然后修剪最后一个逗号太好了,可以了!我知道我忽略了这么简单的事情。如果我抛出一个else If(lstResponsibility.Items.Contains(respName)==false){txtResults.Text=“没有冲突。”;}。。。然后将匹配值添加到列表框并重新运行该方法,“没有冲突”消息将保留,并且不会被新的匹配值覆盖。@InnerMB如果使用+=追加文本,请确保先清除文本。在方法顶部,您需要添加
txtreults.Text=“”
或txtreults.Text=string.Empty()
或txtResults.Clear()代码>谢谢你的指针,但出于某种原因,“没有冲突”字符串似乎压倒了匹配的if语句。
txtResults.Text += respName + ", ";