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

标签 c# loops if-statement

看看这个:

myReader = cmd.ExecuteReader();
if (myReader.HasRows)
{
    while (myReader.Read())
    {
        info = myReader.GetString("info");
        ...
    }
 }
.....

嗯,我不知道为什么,但是当我编译它并在另一台 PC 上使用它时,它会因为 while 而爆炸。但如果我这样做:

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

... 会起作用。请注意,由于程序的逻辑,我知道我每次都会只有一个元素

这样做可以吗?它看起来很糟糕,也许不是一个好的做法 (?)。我问你的方向。

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

 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();
 }

最佳答案

只要我期望只有一行,我就会这样做,这没有错。

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

此外,我倾向于不理会 if (myReader.HasRows),因为 if (myReader.Read()) 涵盖了这一点。

我不知道为什么 while 会导致您出现问题...我只是就在 while 上使用 if 提出我的意见> 如果您不希望出现多行。

关于C#:当 Reader 只有一个元素时,我应该使用 "if"而不是 "while"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8522745/

相关文章:

c# - 更改现有主题的样式(AvalonDock)

c# - 用户编辑后数据网格单元格格式不保留?

用于查找匹配属性值的 JavaScript for 循环在第一个对象之后停止迭代

python - 在Python中循环压缩zip文件

c# - 使用 Objective C 从 MS 数据库获取数据?

c# - 为什么字符串指针位置不同?

c++ - 当我调用我的函数时,while 循环会跳过一个步骤

java - If 语句字符串 = 用于显示国家/地区不同内容的文本

python - 当 else 完成得最多时,制作 if-elif-elif-else 语句的最有效方法是什么?

matlab - 如何获得函数内的语句以随机选择的顺序执行?