C # SqlDataReader продолжает читать - PullRequest
0 голосов
/ 06 мая 2019

У меня есть метод для получения данных из моей базы данных SQL Server. Я использую reader, чтобы получить все данные. Проблема в том, что reader продолжает читать , а приложение не появляется . Это как бесконечный цикл или что-то в этом роде.

public static List<Reservering> GetReserverings()
{
    Reservering res = new Reservering();

    using (var conn = new SqlConnection(ConnectionString))
    {
            conn.Open();
            const string query = "select b.boekingid, k.naam, bk.incheckdatum, bk.uitcheckdatum, b.hotelid, b.aantal_gasten from boeking b join klant k on k.klantid = b.boekingid join boekingkamer bk on b.boekingid = bk.boekingid where bk.incheckdatum is not null and bk.uitcheckdatum is not null";

            SqlCommand selectReserveringen = new SqlCommand(query, conn);

            SqlDataReader reader = selectReserveringen.ExecuteReader();

            while (reader.Read())
            {
                 res.Id =  (int)reader["boekingid"];
                 res.Naam = (string)reader["naam"];
                 res.Incheck_datum = (DateTime)reader["incheckdatum"];
                 res.Uitcheck_datum = (DateTime)reader["uitcheckdatum"];
                 res.Hotel = (int)reader["hotelid"];
                 res.Aantal_personen = (int)reader["aantal_gasten"];
            }

            reader.Close();
        }

        return GetReserverings();
}

Кто-нибудь знает, как решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 06 мая 2019

Вы получили бесконечную рекурсию , вызвав сам метод в конце:

return GetReserverings();

Вы могли бы обнаружить это, установив точку останова в своем методе и пройдя черезваш код.

Вместо этого вы хотите вернуть список резервирований:

var result = new List<Reservering>();

// your code...

return result;

И внутри вашего цикла while() вы захотите создавать новый Reservering каждую итерацию,и Add к списку результатов.

1 голос
/ 06 мая 2019

Вы должны создать экземпляр из Reservering для каждой записи, прочитать и сохранить эти экземпляры в List<Reservering>:

public static List<Reservering> GetReserverings() {
  List<Reservering> result = new List<Reservering>();

  using (var conn = new SqlConnection(ConnectionString)) {
    conn.Open();

    const string query = 
      @"select b.boekingid, 
               k.naam, 
               bk.incheckdatum, 
               bk.uitcheckdatum, 
               b.hotelid, 
               b.aantal_gasten 
          from boeking b join 
               klant k on k.klantid = b.boekingid join 
               boekingkamer bk on b.boekingid = bk.boekingid 
         where bk.incheckdatum is not null 
           and bk.uitcheckdatum is not null";

     using (SqlCommand selectReserveringen = new SqlCommand(query, conn)) {
       using (SqlDataReader reader = selectReserveringen.ExecuteReader()) {
         while (reader.Read()) {
           Reservering res = new Reservering();
           result.Add(res); 

           res.Id              = Convert.ToInt32(reader["boekingid"]);
           res.Naam            = Convert.ToString(reader["naam"]);
           res.Incheck_datum   = Convert.ToDateTime(reader["incheckdatum"]);
           res.Uitcheck_datum  = Convert.ToDateTime(reader["uitcheckdatum"]);
           res.Hotel           = Convert.ToInt32(reader["hotelid"]);
           res.Aantal_personen = Convert.ToInt32(reader["aantal_gasten"]);  
         }
       } 
     }
   }      

   return result;
}

Редактировать: Вы можете попытаться упростить цикл while с помощью инициализации объекта:

     ...
     while (reader.Read()) {
       result.Add(new Reservering() {
         Id              = Convert.ToInt32(reader["boekingid"]),
         Naam            = Convert.ToString(reader["naam"]),
         Incheck_datum   = Convert.ToDateTime(reader["incheckdatum"]),
         Uitcheck_datum  = Convert.ToDateTime(reader["uitcheckdatum"]),  
         Hotel           = Convert.ToInt32(reader["hotelid"]),
         Aantal_personen = Convert.ToInt32(reader["aantal_gasten"]) 
       });
     }
0 голосов
/ 06 мая 2019
public static List<Reservering> GetReserverings()
    {
        List<Reserving> reservings = new List<Reservings>();

        using (var conn = new SqlConnection(ConnectionString))
        {
                conn.Open();
                const string query = "select b.boekingid, k.naam, bk.incheckdatum, bk.uitcheckdatum, b.hotelid, b.aantal_gasten from boeking b join klant k on k.klantid = b.boekingid join boekingkamer bk on b.boekingid = bk.boekingid where bk.incheckdatum is not null and bk.uitcheckdatum is not null";

                SqlCommand selectReserveringen = new SqlCommand(query, conn);

                SqlDataReader reader = selectReserveringen.ExecuteReader();

                while (reader.Read())
                {

                     Reservering res = new Reservering();
                     res.Id =  (int)reader["boekingid"];
                     res.Naam = (string)reader["naam"];
                     res.Incheck_datum = (DateTime)reader["incheckdatum"];
                     res.Uitcheck_datum = (DateTime)reader["uitcheckdatum"];
                     res.Hotel = (int)reader["hotelid"];
                     res.Aantal_personen = (int)reader["aantal_gasten"];
                     reservings.add(res);
                }

                reader.Close();
            }

            return reservings;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...