NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 5 - SqlDataReader a připojená databáze v C# .NET

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Antonín Výtaha:27.4.2024 23:59

Ahoj kamarádi, mám následující dotaz:

vytvořím si univerzální třídu pro čtení z databáze, která mi vrací v listu načtená data - věděl by někdo, jak z toho listu například přes foreach vytřískat jednotlivé položky co se načetly z databáze? Dejme tomu třeba SPZ vozidla?

class Databaze
    {
        string conectionString = Properties.Settings.Default.fd3_dataConnectionString;

        public List<SqlDataReader> NacistData(string vyhledat)
        {
            List<SqlDataReader> nactenaData = new List<SqlDataReader>();

            using (SqlConnection pripojeni = new SqlConnection(conectionString))
            {
                pripojeni.Open();

                SqlCommand prikaz = new SqlCommand(vyhledat, pripojeni);

                SqlDataReader dataReader = prikaz.ExecuteReader();

                while (dataReader.Read())
                    nactenaData.Add(dataReader);
            }
            return nactenaData;
        }
    }

v Mainu:

private void NacistVozidla()
        {
            Databaze databaze = new Databaze(); // Vytvořit třídu s databázi
            List<SqlDataReader> nactenaData = databaze.NacistData("SELECT SPZ, RIDIC FROM Vozidla"); // Nahrát data z databáze

        foreach (var data in nactenaData)
            {
                ?
                ?
                ?
            }
        }

Nebo na to jdu od začátku blbě? 🙃

 
Odpovědět
27.4.2024 23:59
Avatar
Odpovídá na Antonín Výtaha
Antonín Výtaha:8.6.2024 23:01

Kdyby se to někomu hodilo, našel jsem nejlepší řešení na této stránce: https://www.dotnetcurry.com/…o-data-table ve výsledku jsem si to upravil ve třídě s databází takto:

class Databaze
    {

        string conectionString = Properties.Settings.Default.fd3_dataConnectionString;

        public DataTable NacistData(string vyhledat)
        {
            DataTable tabulka = new DataTable();
            SqlConnection pripojeni = null;
            try
            {
                pripojeni = new SqlConnection(conectionString);
                SqlCommand prikaz = new SqlCommand(vyhledat, pripojeni);
                pripojeni.Open();

                SqlDataReader dataReader = prikaz.ExecuteReader(CommandBehavior.CloseConnection);

                tabulka.Load(dataReader);
            }

            finally
            {
                pripojeni.Close();
            }

            return tabulka;
        }

        public int PriradIndex(string polozka, DataTable tabulkaDat)
        {
            for (int i = 0; i < tabulkaDat.Columns.Count; i++)
                if (tabulkaDat.Columns[i].ColumnName.ToString() == polozka)
                    return i;

            return -1;
        }
    }

a v Mainu (nebo lépe ve třídě Správce vozidel 😀 ) to mám takto:

private void NacistVozidla()
       {
           Databaze databaze = new Databaze();
           DataTable zaznamy = databaze.NacistData("SELECT SPZ, RIDIC, NAZEV FROM Vozidla");

           int spz = databaze.PriradIndex("SPZ", zaznamy);
           int ridic = databaze.PriradIndex("RIDIC", zaznamy);
           int nazevVozidla = databaze.PriradIndex("NAZEV", zaznamy);

           for (int i = 0; i < zaznamy.Rows.Count; i++)
           {
               Vozidlo vozidlo = new Vozidlo
               {
                   SPZ = zaznamy.Rows[i].ItemArray[spz].ToString(),
                   Ridic = zaznamy.Rows[i].ItemArray[ridic].ToString(),
                   NazevVozidla = zaznamy.Rows[i].ItemArray[nazevVozidla].ToString()
               };
               vozidla.Add(vozidlo);
           }
       }

Kdyby se to někomu hodilo, bude to jedině dobře.

 
Odpovědět
8.6.2024 23:01
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 22.