C#:当Reader只有一个元素时,我应该使用"if"而不是"while"吗?

Kan*_*ani 7 c# loops if-statement

看这个:

myReader = cmd.ExecuteReader();
if (myReader.HasRows)
{
    while (myReader.Read())
    {
        info = myReader.GetString("info");
        ...
    }
 }
.....
Run Code Online (Sandbox Code Playgroud)

好吧,我不知道为什么,但是当我编译它并在另一台PC中使用它时,它会因为时间而爆炸.但如果我这样做:

myReader = cmd.ExecuteReader();
if (myReader.HasRows)
{
    if (myReader.Read())    <------------------- NOTICE THE IF
    {
        info = myReader.GetString("info");
        ...
    }
 }
.....
Run Code Online (Sandbox Code Playgroud)

... 将工作.请注意,由于程序的逻辑,我知道每次只有一个元素.

可以这样做吗?它看起来很可怕,也许不是一个好习惯().我在问你的方向.

编辑:将发布更多代码,因为可以帮助找到我的错误:

 while (myReader.Read())
 {
    info = myReader.GetString("info");
    ...


     /**
      * Write the relevant info in the LOGS
      */
      connection.Close();     <----------   :S  
      connection.Open();      <---------- if I don´t do this I got some problems with the connection!!!!
      string queryLog = "INSERT INTO ....;
      MySqlCommand cmdLog = new MySqlCommand(queryLog, connection);
      cmdLog.ExecuteNonQuery();
 }
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 13

每当我期待一行时,我就这样做,没有任何问题.

如果我期待单个值,我会ExecuteScalar改用.这将只返回返回的结果集的第一行的第一列中保存的值,通常该集只有一列和一行,因此您不会注意到这一点.

此外,我倾向于不打算if (myReader.HasRows)作为if (myReader.Read())封面.

我不知道为什么while你发出的原因...我只是提出我的意见,如果你不期望多行,使用ifover while.