SQL リーダー クラスに問題があります。
データベースに Airport という名前のカスタム オブジェクトがあります。しかし、データリーダーを正しく使用するのに問題があります。すべての空港をリストに抽出しようとすると (以下の方法 2 を参照)、オブジェクトをリストに追加する前に while(_reader.Read()) ループからジャンプするようです。
助言がありますか?
オブジェクトを抽出するには、次の 3 つの方法を使用します。
特定のオブジェクトを検索するには:
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; }
すべての空港をリストに入れるには
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; }
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; }