C# 选择和检索不同行中的多个单元格

C# 选择和检索不同行中的多个单元格,c#,sql,C#,Sql,我试图检索不同行中存在正确所有者的多个单元格,但我只能检索第一个匹配项,它就停在那里,我尝试将其与for一起使用,但我不认为。ExecuteScalar()是实现这一点的方法。也许我只是愚蠢,做得完全错误 代码: checkPlayerName=API.getPlayerName(播放器); string checkOwnedCars=“从[carowner]中选择COUNT(*),其中Owner='“+checkPlayerName+”; con.Open(); SqlCommand che

我试图检索不同行中存在正确所有者的多个单元格,但我只能检索第一个匹配项,它就停在那里,我尝试将其与for一起使用,但我不认为。ExecuteScalar()是实现这一点的方法。也许我只是愚蠢,做得完全错误

代码:


checkPlayerName=API.getPlayerName(播放器);
string checkOwnedCars=“从[carowner]中选择COUNT(*),其中Owner='“+checkPlayerName+”;
con.Open();
SqlCommand checkcarscont=新的SqlCommand(checkOwnedCars,con);
int carsconttovar=Convert.ToInt32(checkcarscont.ExecuteScalar());
con.Close();
对于(int i=0;i}
您没有迭代从查询中获得的结果

另外,请始终使用参数化查询来防止SQL注入攻击


您没有迭代从查询中获得的结果

另外,请始终使用参数化查询来防止SQL注入攻击


您在哪里设置
checkPlayerName
?还强烈建议使用参数,不要连接strings.checkPlayerName=API.getPlayerName(player);但问题不在这里,因为我可以从所有者那里检索数据,但只能检索一行,不能检索其他行。好吧,我想我知道怎么回事了。您正在使用计数尝试迭代来自车主的LP值,对吗?除了每次在循环中对同一玩家运行相同的查询。该值不会更改,因此结果不会更改。我认为您希望迭代返回值。您在哪里设置
checkPlayerName
?还强烈建议使用参数,不要连接strings.checkPlayerName=API.getPlayerName(player);但问题不在这里,因为我可以从所有者那里检索数据,但只能检索一行,不能检索其他行。好吧,我想我知道怎么回事了。您正在使用计数尝试迭代来自车主的LP值,对吗?除了每次在循环中对同一玩家运行相同的查询。该值不会更改,因此结果不会更改。我想你应该迭代返回值。如果(reader.Read())应该是
,而(reader.Read())
应该是简洁的。无需2次访问数据库。使用合并
(不过OP也应该为连接执行此操作)。包含参数而不是串联。回答得很好。if(reader.Read())
应该是
,而(reader.Read())
应该是简洁的。无需2次访问数据库。使用合并
(不过OP也应该为连接执行此操作)。包含参数而不是串联。回答得好。
SqlCommand command = new SqlCommand("SELECT LP FROM [carOwners] WHERE Owner=@checkPlayerName", con);
command.Parameters.AddWithValue("@checkPlayerName",checkPlayerName);

using (SqlDataReader reader = command.ExecuteReader())
{
  while (reader.Read())
  {
     Console.WriteLine(String.Format("{0}",reader["id"]));
     //API.sendChatMessageToPlayer(player, "Owned Vehicle: " + reader["id"].ToString());
   }
}

conn.Close();