C# zapis do Listy danych z sql

0

Witam

Mając bazę danych w sql np. Samochodów, w C# łącze się z bazą danych, wyszukuję konkretny rekord w bazie (select from where) i mam wynik, chciałem go jednak dodać do stworzonej listy samochodów List<Samochod> Osobowe = new List<Smochod>();

Jak to najprościej zrobić?

2

To zależy w jakiej postaci otrzymujesz wyniki. W jaki sposób pobierasz dane?
Najlepiej skorzystać z DataReadera


using (var connection = new DbConnection(connectionString)
{
string zapytanie = "SELECT ...";
using(var command = new DbCommand(zapytanie , connection))
{
  using(var reader = command.ExecuteReader())
  {
    while (reader.Read())
    {
      Osobowe.Add( new samochod
      {
          Model= reader.GetString("Model"), // w cudzysłowie podajesz nazwy kolumn
          Marka = reader.GetString("Marka") 
           (....)
      });
    }
  }
}
}

Zamiast DbConnection , DbCommand możesz użyć komponentów odpowiednich do Twojej bazy danych

3

Ja ze swojej strony polecam Dappera :)

Przykładzik (akurat z użysiem procedury):

                using var connection = new SqlConnection(con.GetConnectionString());
                List<Procedure> procedures = connection.Query<Procedure>("FundReports_pobierz_procedury", commandType: CommandType.StoredProcedure).ToList();

EDIT: Przykład do pytania z komentarza:
Jeżeli masz klasę Samochód, z polami: Id, Marka, SalonId to robisz to po prostu tak:

List<Samochod> samochod;
            using (var c = new SqlConnection(**CONNECTION_STRING**))
            {
                samochod= c.Query<Samochod>("SELECT ID, Marka, SalonId FROM samochody").ToList();
            }
0
kobi55 napisał(a):

Ja ze swojej strony polecam Dappera :)

Przykładzik (akurat z użysiem procedury):

                using var connection = new SqlConnection(con.GetConnectionString());
                List<Procedure> procedures = connection.Query<Procedure>("FundReports_pobierz_procedury", commandType: CommandType.StoredProcedure).ToList();

EDIT: Przykład do pytania z komentarza:
Jeżeli masz klasę Samochód, z polami: Id, Marka, SalonId to robisz to po prostu tak:

List<Samochod> samochod;
            using (var c = new SqlConnection(**CONNECTION_STRING**))
            {
                samochod= c.Query<Samochod>("SELECT ID, Marka, SalonId FROM samochody").ToList();
            }

Super :). Złoto.

0

Dzięki podpowiedziom udało mi się dodać elementy do List, ale gdy zawołam "Select * from Samochody" i dodam to do List<samochod> to każdy rekord będzie osobnym elementem listy (mając 5 samochodów i 4 kolumny do List<samochod> dodaje się 20 elementów), a chciałbym by do listy posiadała 5 obiektów samochód.

0
Ulv napisał(a):

Dzięki podpowiedziom udało mi się dodać elementy do List, ale gdy zawołam "Select * from Samochody" i dodam to do List<samochod> to każdy rekord będzie osobnym elementem listy (mając 5 samochodów i 4 kolumny do List<samochod> dodaje się 20 elementów), a chciałbym by do listy posiadała 5 obiektów samochód.

Pokaż wywołanie SQL.

0
Ulv napisał(a):

https://4programmers.net/Pastebin/15892

No a jak chcesz mieć inaczej skoro tworzysz listę stringów?

 List<String> columnData = new List<String>();

i dla każdego rekordu dodajesz 4 wpisy:

while (reader.Read())
                        {
                            columnData.Add(reader.GetString(0));
                            columnData.Add(reader.GetString(1));
                            columnData.Add(reader.GetString(2));
                            columnData.Add(reader.GetString(3));
   
                        }

Dawno nie korzystałem ze zwykłego SqlDataReader, ale powinieneś to zrobić raczej tak:

var list = new List<TWOJA_KLASA>();

while (reader.Read())
{
    list.Add(new TWOJA_KLASA(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3)); //zakladajac, ze masz w swojej klasie taki konstruktor
}
0

Poprawiłem na List<Uczen> lecz dwa pierwsze rekordy to są int (UczenID i KlasaID) więc przy reader.GetString(0), reader.GetString(1), podkreśla błąd.

1
Ulv napisał(a):

dwa pierwsze rekordy to są int (UczenID i KlasaID) więc przy reader.GetString(0), reader.GetString(1), podkreśla błąd.

No to użyj metody do Intow ;)
https://docs.microsoft.com/pl-pl/dotnet/api/system.data.sqlclient.sqldatareader.getint32?view=dotnet-plat-ext-3.1

0

Udało się.

Oczywiście ja namieszałem z int i string, ale nie będę się tu chwalił.
Bardzo dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1