SQLite w .NET - C CLI
Obiecałem tutek do SQLite i C++/CLI:
I. Na początek najlepiej ściągnąć jakiegoś admia do tej bazy danych, polecam SQLite Administrator:
http://sqliteadmin.orbmu2k.de/
ale są też inne.
Jeśli nie znamy SQL, to nie trzeba się martwić, jest też tryb graficzny.
Tworzymy nową bazę(Baza danych→Nowa), nadajemy jej nazwę "base" i wklejamy w zakładce "Zapytanie SQL" poniższy kod:
II. Mamy bazę, więc przechodzimy do C++/CLI:
Musimy zainstalować tzw. prowider do SQLite. Dobrze, że znalazł się, ktoś kto tak pięknie, to zrobił.
Pobieramy ADO.NET 2.0 Provider for SQLite:
http://sourceforge.net/projects/sqlite-dotnet2/
Z instalacją nie powinniśmy mieć problemu, wykrywa naszego Visual'a samodzielnie(jak się zatnie przy wyborze, trzeba poczekać).
Tworzymy nowy projekt Windows Form Application.
Teraz skopiujemy naszą bazę do folderu z projektem. Domyślny folder na projekty jest w "Moje Dokumenty/Visual Studio 2008\Projects\" wchodzimy w folder z nazwą projektu, tam będzie kolejny folder o tej samej nazwie, wchodzimy do niego i kopiujemy tam bazę.
Musimy dodać referencję do klasy obsługującej bazę SQLite. Wchodzimy w:
"Project→'nazwa_projektu' properties→Common Properties→Framework and References" po prawej stronie klikamy "Add New Reference" i wybieramy z listy "System.Data.SQLite".
Przechodzimy do kodu i na początku po dodawanych "namespace" dodajemy do SQLite:
using namespace
III. Tworzymy 4 Buttony i DataGridView.
Obrazek formy:

1. Wyświetlanie danych - button1
W designerze klikamy 2x na button1, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
Możemy skompilować projekt, wcisnąć buttona i cieszyć się z wyświetlonych danych w DataGridView.
2. Dodawanie danych(INSERT INTO) - button2
W designerze klikamy 2x na button2, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
3. Zmiana danych(UPDATE) - button3
W designerze klikamy 2x na button3, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
Button ten edytuje pierwszy wiersz zmieniając tekst rekordu i dodaje do niego aktualny czas.
4. Usuwanie danych(DELETE) - button4
W designerze klikamy 2x na button4, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
Buttona ten usuwa pierwszy rekord w tabeli.
Projekt do ściągnięcia:
SQLite.part01.rar (510 KB)
SQLite.part02.rar (510 KB)
SQLite.part03.rar (510 KB)
SQLite.part04.rar (510 KB)
SQLite.part05.rar (510 KB)
SQLite.part06.rar (510 KB)
SQLite.part07.rar (133,06 KB)
Cały kod:
I. Na początek najlepiej ściągnąć jakiegoś admia do tej bazy danych, polecam SQLite Administrator:
http://sqliteadmin.orbmu2k.de/
ale są też inne.
Jeśli nie znamy SQL, to nie trzeba się martwić, jest też tryb graficzny.
Tworzymy nową bazę(Baza danych→Nowa), nadajemy jej nazwę "base" i wklejamy w zakładce "Zapytanie SQL" poniższy kod:
CREATE TABLE [table1] ( [col1] TEXT NULL, [col2] TEXT NULL ); INSERT INTO table1 ( col1, col2 ) VALUES ( "Teks w kolumnie 1.", "Teks w kolumnie 2." );
II. Mamy bazę, więc przechodzimy do C++/CLI:
Musimy zainstalować tzw. prowider do SQLite. Dobrze, że znalazł się, ktoś kto tak pięknie, to zrobił.
Pobieramy ADO.NET 2.0 Provider for SQLite:
http://sourceforge.net/projects/sqlite-dotnet2/
Z instalacją nie powinniśmy mieć problemu, wykrywa naszego Visual'a samodzielnie(jak się zatnie przy wyborze, trzeba poczekać).
Tworzymy nowy projekt Windows Form Application.
Teraz skopiujemy naszą bazę do folderu z projektem. Domyślny folder na projekty jest w "Moje Dokumenty/Visual Studio 2008\Projects\" wchodzimy w folder z nazwą projektu, tam będzie kolejny folder o tej samej nazwie, wchodzimy do niego i kopiujemy tam bazę.
Musimy dodać referencję do klasy obsługującej bazę SQLite. Wchodzimy w:
"Project→'nazwa_projektu' properties→Common Properties→Framework and References" po prawej stronie klikamy "Add New Reference" i wybieramy z listy "System.Data.SQLite".
Przechodzimy do kodu i na początku po dodawanych "namespace" dodajemy do SQLite:
using namespace
using namespace System::Data::SQLite;
III. Tworzymy 4 Buttony i DataGridView.
Obrazek formy:

1. Wyświetlanie danych - button1
W designerze klikamy 2x na button1, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych
SQLiteDataAdapter ^adapter = gcnew SQLiteDataAdapter("SELECT * FROM table1;",conn); // Tworzymy adapter i zapytanie wybierające wszystkie elementy z tabeli "tabela1"
DataTable ^table = gcnew DataTable(); // Bardzo pomocny obiekt do pracy na wynikach zapytania
adapter->Fill(table); // wypełniamy DataTabla danymi z wyniku zapytania
dataGridView1->DataSource = table; // Przypisujemy dane z DataTabla do naszego GridViewMożemy skompilować projekt, wcisnąć buttona i cieszyć się z wyświetlonych danych w DataGridView.
2. Dodawanie danych(INSERT INTO) - button2
W designerze klikamy 2x na button2, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych
SQLiteCommand ^command = gcnew SQLiteCommand(conn); // Tworzymy nowe zapytanie
DateTime ^time = gcnew DateTime(); // Tworzymy nową datę
conn->Open(); // Otwiarcie połączenia
command->CommandText = "INSERT INTO table1 (col1, col2) Values( 'Data i czas dodania:"+time->Now.Now.ToString()+"' , 'Data i czas dodania:"+time->Now.Now.ToString()+"' );"; // Treść zapytania
command->ExecuteNonQuery(); // Wykonanie zapytania
conn->Close(); // Zamyknięcie połączenia
button1_Click(this, e); // Wywołujemy kliknięcie button1 aby zaktualizowało nam GridView3. Zmiana danych(UPDATE) - button3
W designerze klikamy 2x na button3, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych
SQLiteCommand ^command = gcnew SQLiteCommand(conn); // Tworzymy nowe zapytanie
DateTime ^time = gcnew DateTime(); // Tworzymy nową datę
conn->Open(); // Otwiarcie połączenia
command->CommandText = "UPDATE table1 SET col1 = '1. Zmieniono: "+time->Now.Now.ToString()+"',col2 = '2. Zmieniono: "+time->Now.Now.ToString()+"' WHERE rowid = ( SELECT min(rowid) FROM table1 );"; // Treść zapytania, zmienia nam pierwszy wiersz, dodaje aktualny czas i datę do kolumny
command->ExecuteNonQuery(); // Wykonanie zapytania
conn->Close(); // Zamyknięcie połączenia
button1_Click(this, e); // Wywołujemy kliknięcie button1 aby zaktualizowało nam GridViewButton ten edytuje pierwszy wiersz zmieniając tekst rekordu i dodaje do niego aktualny czas.
4. Usuwanie danych(DELETE) - button4
W designerze klikamy 2x na button4, aby przejść do jego zdarzenia Click. Wklejamy tam poniższy kod:
SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych
SQLiteCommand ^command = gcnew SQLiteCommand(conn); // Tworzymy nowe zapytanie
conn->Open(); // Otwiarcie połączenia
command->CommandText = "DELETE FROM table1 Where rowid = ( SELECT min(rowid) FROM table1 );"; // Treść zapytania, usuwamy 1 rekord w tabeli
command->ExecuteNonQuery(); // Wykonanie zapytania
conn->Close(); // Zamyknięcie połączenia
button1_Click(this, e); // Wywołujemy kliknięcie button1 aby zaktualizowało nam GridViewButtona ten usuwa pierwszy rekord w tabeli.
Projekt do ściągnięcia:
SQLite.part01.rar (510 KB)
SQLite.part02.rar (510 KB)
SQLite.part03.rar (510 KB)
SQLite.part04.rar (510 KB)
SQLite.part05.rar (510 KB)
SQLite.part06.rar (510 KB)
SQLite.part07.rar (133,06 KB)
Cały kod:
#pragma once namespace SQLite { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::Data::SQLite; /// <summary> /// Summary for Form1 /// /// WARNING: If you change the name of this class, you will need to change the /// 'Resource File Name' property for the managed resource compiler tool /// associated with all .resx files this class depends on. Otherwise, /// the designers will not be able to interact properly with localized /// resources associated with this form. /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: Add the constructor code here // } protected: /// <summary> /// Clean up any resources being used. /// </summary> ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; protected: private: System::Windows::Forms::DataGridView^ dataGridView1; private: System::Windows::Forms::Button^ button2; private: System::Windows::Forms::Button^ button3; private: System::Windows::Forms::Button^ button4; private: /// <summary> /// Required designer variable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> void InitializeComponent(void) { this->button1 = (gcnew System::Windows::Forms::Button()); this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView()); this->button2 = (gcnew System::Windows::Forms::Button()); this->button3 = (gcnew System::Windows::Forms::Button()); this->button4 = (gcnew System::Windows::Forms::Button()); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->dataGridView1))->BeginInit(); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(12, 12); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(75, 23); this->button1->TabIndex = 0; this->button1->Text = L"button1"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // // dataGridView1 // this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize; this->dataGridView1->Location = System::Drawing::Point(12, 94); this->dataGridView1->Name = L"dataGridView1"; this->dataGridView1->Size = System::Drawing::Size(525, 150); this->dataGridView1->TabIndex = 1; // // button2 // this->button2->Location = System::Drawing::Point(12, 41); this->button2->Name = L"button2"; this->button2->Size = System::Drawing::Size(75, 23); this->button2->TabIndex = 2; this->button2->Text = L"button2"; this->button2->UseVisualStyleBackColor = true; this->button2->Click += gcnew System::EventHandler(this, &Form1::button2_Click); // // button3 // this->button3->Location = System::Drawing::Point(93, 12); this->button3->Name = L"button3"; this->button3->Size = System::Drawing::Size(75, 23); this->button3->TabIndex = 3; this->button3->Text = L"button3"; this->button3->UseVisualStyleBackColor = true; this->button3->Click += gcnew System::EventHandler(this, &Form1::button3_Click); // // button4 // this->button4->Location = System::Drawing::Point(93, 41); this->button4->Name = L"button4"; this->button4->Size = System::Drawing::Size(75, 23); this->button4->TabIndex = 6; this->button4->Text = L"button4"; this->button4->UseVisualStyleBackColor = true; this->button4->Click += gcnew System::EventHandler(this, &Form1::button4_Click); // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 13); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(831, 258); this->Controls->Add(this->button4); this->Controls->Add(this->button3); this->Controls->Add(this->button2); this->Controls->Add(this->dataGridView1); this->Controls->Add(this->button1); this->Name = L"Form1"; this->Text = L"Form1"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); (cli::safe_cast<System::ComponentModel::ISupportInitialize^ >(this->dataGridView1))->EndInit(); this->ResumeLayout(false); } #pragma endregion private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych SQLiteDataAdapter ^adapter = gcnew SQLiteDataAdapter("SELECT * FROM table1;",conn); // Tworzymy adapter i zapytanie wybierające wszystkie elementy z tabeli "tabela1" DataTable ^table = gcnew DataTable(); // Bardzo pomocny obiekt do pracy na wynikach zapytania conn->Open(); // Otwiarcie połączenia adapter->Fill(table); // wypełniamy DataTabla danymi z wyniku zapytania dataGridView1->DataSource = table; // Przypisujemy dane z DataTabla do naszego GridView conn->Close(); // Zamyknięcie połączenia //a } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych SQLiteCommand ^command = gcnew SQLiteCommand(conn); // Tworzymy nowe zapytanie DateTime ^time = gcnew DateTime(); // Tworzymy nową datę conn->Open(); // Otwiarcie połączenia command->CommandText = "INSERT INTO table1 (col1, col2) Values( 'Data i czas dodania:"+time->Now.Now.ToString()+"' , 'Data i czas dodania:"+time->Now.Now.ToString()+"' );"; // Treść zapytania command->ExecuteNonQuery(); // Wykonanie zapytania conn->Close(); // Zamyknięcie połączenia button1_Click(this, e); // Wywołujemy kliknięcie button1 aby zaktualizowało nam GridView } private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) { SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych SQLiteCommand ^command = gcnew SQLiteCommand(conn); // Tworzymy nowe zapytanie conn->Open(); // Otwiarcie połączenia command->CommandText = "DELETE FROM table1 Where rowid = ( SELECT min(rowid) FROM table1 );"; // Treść zapytania, usuwamy 1 rekord w tabeli command->ExecuteNonQuery(); // Wykonanie zapytania conn->Close(); // Zamyknięcie połączenia button1_Click(this, e); // Wywołujemy kliknięcie button1 aby zaktualizowało nam GridView } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) { SQLiteConnection ^conn = gcnew SQLiteConnection("Data Source = base.s3db;"); // Tworzymy nowe połączenie z bazą, base.s3db, to nasza baza danych SQLiteCommand ^command = gcnew SQLiteCommand(conn); // Tworzymy nowe zapytanie DateTime ^time = gcnew DateTime(); // Tworzymy nową datę conn->Open(); // Otwiarcie połączenia command->CommandText = "UPDATE table1 SET col1 = '1. Zmieniono: "+time->Now.Now.ToString()+"',col2 = '2. Zmieniono: "+time->Now.Now.ToString()+"' WHERE rowid = ( SELECT min(rowid) FROM table1 );"; // Treść zapytania command->ExecuteNonQuery(); // Wykonanie zapytania conn->Close(); // Zamyknięcie połączenia button1_Click(this, e); // Wywołujemy kliknięcie button1 aby zaktualizowało nam GridView } }; }
Kategoria: C#
4 komentarze
To wywal z projektu niepotrzebne pliki ... pch, ...
Wtedy zmiesci sie w jednym
Ponieważ jest limit 512kb per plik:-)
Dzięki:-) Tylko nie wiem czy tak nieźle.... Chciałem jeszcze dokładnie opisać DataGridView, bo miałem trochę szukania co do niektórych rzeczy, no i sam jestem jeszcze beginner:-)
Wow, nieźle. Tylko czemu projekt podzieliłeś na tyle części 0_o?
A ja wiem jakie, to są niepotrzebne. Jak masz wolne łącze, to możesz mi powiedzieć co wywalić i wtedy Ci na mail wrzuce, albo nawet tutaj.