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.