1

SQL リーダー クラスに問題があります。

データベースに Airport という名前のカスタム オブジェクトがあります。しかし、データリーダーを正しく使用するのに問題があります。すべての空港をリストに抽出しようとすると (以下の方法 2 を参照)、オブジェクトをリストに追加する前に while(_reader.Read()) ループからジャンプするようです。

助言がありますか?

オブジェクトを抽出するには、次の 3 つの方法を使用します。

  1. 特定のオブジェクトを検索するには:

    public Airport FindAirportByCode(string _airportCode)
    {
        con.Open();
        string query = "SELECT * from Airport WHERE airportCode = '" + _airportCode + "'";
        SqlCommand cmd = new SqlCommand(query, con);
        SqlDataReader _reader = cmd.ExecuteReader();
    
        Airport retAirport = BuildAirport(_reader);
        _reader.Close();
        con.Close();
        return retAirport;
    }
    
  2. すべての空港をリストに入れるには

    public List<Airport> SelectAll()
    {
        con.Open();
        List<Airport> airports = new List<Airport>();
        string query = "SELECT * from Airport";
        SqlCommand cmd = new SqlCommand(query, con);
    
        SqlDataReader _reader = cmd.ExecuteReader();
    
        while (_reader.Read())
        {
            Airport temAirport = new Airport();
            temAirport = BuildAirport(_reader);
            airports.Add(temAirport); // It seems to skip this step and only add the last Airport from BuildAirport to the list.
        }
    
        _reader.Close();
        con.Close();
        return airports;
    }
    
  3. C# でオブジェクトにビルドするには

        private Airport BuildAirport(SqlDataReader _reader)
    {
    
        Airport temAirport = new Airport();
        while (_reader.Read())
        {
            temAirport.airportCode = (string) _reader["airportCode"];
            temAirport.airportName = (string) _reader["airportName"];
            temAirport.country = (string) _reader["country"];
            temAirport.city = (string) _reader["city"];
        }
        _reader.Close();
    
    
    
        return temAirport;
    }
    
4

1 に答える 1