SQLite - kilka zapytań jednocześnie, count jako Label.Text?

0

Potrzebuję zrobić dosyć prostą aplikację pokazująca dane z bazy SQLite. Zacząłem od kilku poradników i pogrzebania w internecie i zrobiłem to tak.
Dodałem sobie DataGridView i tak wyświetlam tam dane:

SQLiteConnection myconnection = new SQLiteConnection("Data Source=baza.db;Version=3");
            myconnection.Open();
            SQLiteCommand komenda = new SQLiteCommand();
            komenda.Connection = myconnection;
            komenda.CommandText = "select * from user group by data";

            using (SQLiteDataReader sdr = komenda.ExecuteReader())
            {
                DataTable dt = new DataTable();
                dt.Load(sdr);
                sdr.Close();
                myconnection.Close();
                grid1.DataSource = dt;
            }

Całość się wyświetla, jest ok. Pytanie - moge wyświetlić jedynie wskazane kolumny? Pomijając np. ID?

Teraz potrzebowałbym także zrobić coś na wzór średniej, zliczania z kolejnych rekordów i wyświetlić to jako Label. Zrobiłem to tak:

 myconnection.Open();
            SQLiteCommand komenda = new SQLiteCommand();
            komenda.Connection = myconnection;
            komenda.CommandText = "select count(id), avg(wartosc) from user";

            using (SQLiteDataReader sdr2 = komenda.ExecuteReader())
            {
                while (sdr2.Read()) {
                    label2.Text ="Liczba wierszy: " + sdr2["count(id)"].ToString() +  ", średnia wartosc: " +  sdr2["avg(wartosc)"];
                }                    
            }

Jak generalnie mogę wykonać jakby jedno zapytanie, po drugim, albo uzyskać wyniki wszystkich zapytań "na raz" - tych średnich, zliczania itp.? Powiedzmy wyświetlam tabelę z danymi pod spodem są te średnie, jak to napisać jednocześnie. Łącząc to w taki sposób:

Kolejny problem, który chciałbym rozwiązać to średnia powiedzmy z 30 dni - w bazie jest data, ale w polu o właściwości TEXT, zapewne należałoby to zmienić i jakoś to zliczać, ale jak się za to zabrać?

  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SQLiteConnection myconnection = new SQLiteConnection("Data Source=baza.db;Version=3");
            myconnection.Open();
            SQLiteCommand komenda = new SQLiteCommand();
            komenda.Connection = myconnection;
            komenda.CommandText = "select * from user group by data";

            using (SQLiteDataReader sdr = komenda.ExecuteReader())
            {
                DataTable dt = new DataTable();
                dt.Load(sdr);
                sdr.Close();
                myconnection.Close();
                grid1.DataSource = dt;
            }

            myconnection.Open();
            SQLiteCommand komenda = new SQLiteCommand();
            komenda.Connection = myconnection;
            komenda.CommandText = "select count(id), avg(wartosc) from user";

            using (SQLiteDataReader sdr2 = komenda.ExecuteReader())
            {
                while (sdr2.Read()) {
                    label2.Text ="Liczba wierszy: " + sdr2["count(id)"].ToString() +  ", średnia wartosc: " +  sdr2["avg(wartosc)"];
                }
                    
            }
        }

Mogę ciągle używać * SQLiteCommand komenda = new SQLiteCommand();* - wnioskuję to po tym, że zamykam wcześniej to połączenie.

0

Kawa mi się jeszcze nie rozpuściłą ... nie wnikając na początek w niuanse kodu, chciałbym przekazać ważne słowa "dziel i rządź"
Nie łącz w jednej myśli bazy i GUI, ale dziel to myślowo.

Jak już podzielisz sobie myślenie, szukaj rozwiązań bazodanowych w normalnych kursach - a GUI w odpowiednich

Osobiście nie darzę miłością SQL Lite, po pierwsze za to, ze jest mocno egzotyczna w porównaniu do mainstreamowych, nie szanuje normalnych typów, źle pracowałala by w sieci (nigdy tak nie użyłem - ale skąd wiadomo że mini apliakcja nie będzie miała dobrego przyjęcia i rozwoju na dostęp wielostanowiskowy?)

I raz na jakiś czas zawiedzie mnie pod względem transakcyjnym (na Androidzie) - generalnie do baz plikowych NALEŻY mieć niskie zaufanie w tym wzgledzie

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