• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c# wyświetlanie danych z bazy sqlite

0 głosów
2,245 wizyt
pytanie zadane 8 stycznia 2017 w C i C++ przez BeFree Początkujący (380 p.)

Cześć wszystkim,

Uczę się programować i mam pewien problem.

Piszę prostą aplikację w C# z lokalną bazą danych SQLite. połączenie z bazą danych udało mi się okodować, ale nie bardzo wiem jak okodować button, po naciśnięciu którego dane z wybranej tabeli pojawią się w dataGridView.

Pomożecie? smiley

2 odpowiedzi

0 głosów
odpowiedź 9 stycznia 2017 przez maciej.tokarz Nałogowiec (27,260 p.)
wybrane 29 czerwca 2017 przez BeFree
 
Najlepsza

Cześć!

Generalnie masz kilka warstw tej aplikacji:

  1. Schemat, który odzwierciedla baza danych (tabele, pola).
  2. Dostęp do określonych danych, który naturalnie opiera się na połączeniu z bazą.
  3. Logikę aplikacji, która na podstawie interakcji z GUI wykona określone zadania.
  4. Widok, który wypełni się oczekiwanymi danymi.

Warto poszukać rozwiązania do pracy z danymi, które oprze się na obiektach, np. Entity Framework. Warto również zapoznać się z sposobami bindowania (łączenia) określonych miejsc widoku z właściwościami logiki.

Słowo klucz: MVVM


M.

0 głosów
odpowiedź 9 stycznia 2017 przez BeFree Początkujący (380 p.)
edycja 10 stycznia 2017 przez BeFree

Możecie rzucić okiem? Co robię źle?

Proszę o wyrozumiałość smiley



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
using System.IO;


namespace WindowsFormsApplication8
{
    public partial class Form1 : Form
    {
        SQLiteConnection polaczenie = new SQLiteConnection(string.Format("Data Source = {0}", Path.Combine(Application.StartupPath, "Testowa.db")));
        SQLiteCommand komenda;
        string zapytanieSQL="";
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            SQLiteCommand zapytanieSQL = new SQLiteCommand("SELECT * FROM Osoby", polaczenie);
            try
            {
                SQLiteDataAdapter moja = new SQLiteDataAdapter();
                moja.SelectCommand = zapytanieSQL;
                DataTable tabela = new DataTable();
                moja.Fill(tabela);

                BindingSource zrodlo = new BindingSource();
                zrodlo.DataSource = tabela;
                dataGridView1.DataSource = zrodlo;

            }
            catch(Exception ex)
            {
                MessageBox.Show("Błąd");
            }
        }

       
    }
}

 

komentarz 9 stycznia 2017 przez maciej.tokarz Nałogowiec (27,260 p.)
edycja 9 stycznia 2017 przez maciej.tokarz

Przyznam się bez bicia, że WinFormsów nie używałem, a jedynie xaml (Silverlight, WPF, UWP), ale pewnie w ten deseń to będzie:
 

using System;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;

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

        public void Test()
        {
            try
            {
                using (var connection = new SQLiteConnection($"Data Source = {Path.Combine(Application.StartupPath, "Test.db")}"))
                {
                    connection.Open();
                    var query = new SQLiteCommand("SELECT name FROM employees", connection);
                    var reader = query.ExecuteReader();
                    var table = new DataTable();
                    table.Columns.Add("Name");

                    if (reader.HasRows)
                        while (reader.Read())
                            table.Rows.Add(reader["name"].ToString());

                    dataGridView1.DataSource = table;

                    reader.Close();
                    connection.Close();
                }
            }
            catch (Exception ex)
            {
                Console.Write(@"Błąd: {0}", ex.Message);
                throw;
            }            
        }
    }
}

 

Nie otwierałeś połączenia no i nie wiem czy kopiujesz bazę do bin/Debug nadając jej np. właściwość Copy To Output Directory: Copy always.

TIP: Menedżer do SQLite naszego rodaka

M.

komentarz 10 stycznia 2017 przez BeFree Początkujący (380 p.)
edycja 10 stycznia 2017 przez BeFree
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SQLite;
using System.Data;
using System.IO;


namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public SQLiteConnection con = new SQLiteConnection(string.Format("Data Source = {0}", Path.Combine(Application.StartupPath, "Nowa.db"))); 

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private DataTable get()
        {
            DataTable returnTable = new DataTable();
            con.Open();
            SQLiteCommand cmd = con.CreateCommand();
            cmd.CommandText = "Select * from Test ";
            SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);
            adapter.Fill(returnTable);
            con.Close();
            return returnTable;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataTable dt = get();
            dataGridView1.AutoGenerateColumns = true;
            dataGridView1.DataSource = dt;
        }
    }
}

Wielkie dzięki za odpowiedź! Jakoś sobie z tym poradziłem.

Niby banalne, ale nie mogłem tego dobrze ułożyć.

Początki... smiley

Podobne pytania

0 głosów
1 odpowiedź 974 wizyt
pytanie zadane 12 sierpnia 2018 w C# przez Cacu003 Początkujący (260 p.)
0 głosów
1 odpowiedź 1,158 wizyt
0 głosów
1 odpowiedź 1,279 wizyt
pytanie zadane 26 grudnia 2016 w Java przez azybad Mądrala (5,500 p.)

93,753 zapytań

142,713 odpowiedzi

323,356 komentarzy

63,348 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...