reader.Read()总是空的......但为什么呢?

时间:2014-04-19 14:57:30

标签: c# database if-statement

我有一个问题。所以我有问题,if-query不起作用。他总是会跳进别的路。但是在数据库中是一个条目,所以它不是空的......

      Jump:
            string query = "SELECT * FROM `depositRequests` LIMIT 1";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            MySqlDataReader reader = cmd.ExecuteReader();
            Thread.Sleep(1000);
            reader.Read();

            Log.Info("Durchlauf: " + i);

            if (reader.Read())
            {
                SteamID SteamAddID = new SteamID(reader.GetString(2));
                string authCode = reader.GetString(3);

                Log.Info("SteamAddID: " + SteamAddID);
                Log.Info("AuthCode: " + authCode);
                Bot.log.Success("Add SteamAddID: " + SteamAddID + "AuthCode: " + authCode);

                AddFriendForTrade(SteamAddID, authCode);
            }
            else
            {
                Bot.log.Warn("No Data found! Waiting for Deposit Request");
                Thread.Sleep(60000);
                reader.Close();
                i++;
                goto Jump;
            }

那么为什么他总是跳进else路径,尽管数据库中有一个条目?

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

因为您只获得一个记录,然后在此行的if语句之前阅读它:

Thread.Sleep(1000);
reader.Read(); <---

由于没有第二条记录,您对Read的第二次通话始终会返回 false

您应该删除此行,并在Read语句中仅调用if一次,或者存储Read方法的结果并在if中使用该变量:

bool isRecordExists = reader.Read();
if(isRecordExists)
{
   ...
}