我正在做一个"加载"按钮,用于从SQL数据库加载所有数据,将它们放在列表视图中。
if(lstEnsemble.Items.Count == 0)
{
MySqlConnection connexion = OpenConnection();
MySqlCommand reqRemplissageClient = new MySqlCommand("select * from client order by idClient ASC;", connexion);
MySqlCommand reqRemplissagePanne = new MySqlCommand("select * from Panne order by idClient ASC;", connexion);
MySqlDataReader resultatClient = reqRemplissageClient.ExecuteReader();
MySqlDataReader resultatPanne = reqRemplissageClient.ExecuteReader();
while (resultatClient.Read() && resultatPanne.Read())
{
ListViewItem item = new ListViewItem(resultatClient["nomCli"].ToString());
item.SubItems.Add(resultatClient["prenomCli"].ToString());
if (resultatClient["idClient"] == resultatPanne["idClient"])
{
item.SubItems.Add(resultatPanne["appareil"].ToString());
}
item.SubItems.Add(resultatClient["villeCli"] + " " + resultatClient["cpCli"] + " " + resultatClient["rueCli"]);
item.SubItems.Add(resultatClient["telCli"].ToString());
if (resultatClient["idClient"] == resultatPanne["idClient"])
{
item.SubItems.Add(resultatPanne["description"].ToString());
item.SubItems.Add(resultatPanne["dateEntree"].ToString());
}
item.SubItems.Add(resultatClient["mailCli"].ToString());
lstEnsemble.Items.Add(item);
}
CloseConnection(connexion);
}
显然,这不起作用,但我无法找到另一种方法来做到这一点。 我试图单独做两个请求,但我再次错过了这个逻辑。
答案 0 :(得分:1)
在您的问题中,您尚未完全了解您正在使用哪种数据。看起来你假设(或更好的希望)idClient
值在两个表中完全匹配。
我认为你确实想做一个JOIN
。如果不是这样,我会再次删除这篇文章。
因此,您应该只使用JOIN
进行一次查询:
if(lstEnsemble.Items.Count == 0)
{
string sql = @"SELECT nomCli, prenomCli, appareil, villeCli, rueCli,
cpCli, telCli, description, dateEntree, mailCli
FROM client LEFT JOIN Panne ON (client.idClient = Panne.idClient)";
MySqlConnection connexion = OpenConnection();
MySqlCommand request = new MySqlCommand(sql, connexion);
MySqlDataReader resultat = requestExecuteReader();
while (resultat.Read())
{
ListViewItem item = new ListViewItem(resultat["nomCli"].ToString());
item.SubItems.Add(resultat["prenomCli"].ToString());
item.SubItems.Add(resultat["appareil"].ToString());
item.SubItems.Add(resultat["villeCli"] + " " + resultat["cpCli"] + " " + resultat["rueCli"]);
item.SubItems.Add(resultat["telCli"].ToString());
item.SubItems.Add(resultat["description"].ToString());
item.SubItems.Add(resultat["dateEntree"].ToString());
item.SubItems.Add(resultat["mailCli"].ToString());
lstEnsemble.Items.Add(item);
}
CloseConnection(connexion);
}
但是您应该知道,对于client
中Panne
中没有匹配行的行,结果中会有null
个值。因此,您需要首先使用列索引上的resultat.IsDbNull()
检查它们(sql查询中的位置)
或者,您可以使用INNER JOIN
而不是LEFT JOIN
来仅获取两个表中存在的行。
答案 1 :(得分:0)
你应该改变一些事情,然后变得非常容易。