SQLite를 설치해보자!
간단하게 로컬에서 데이터를 관리하고자 한다면, SQLite가 간단한 것 같다.
VisualStudio에서 C#을 개발할 때 SQLite를 쓰려면 다음과 같은 절차를 따른다.
프로젝트를 오른쪽 클릭을하고, NuGet 패키지 관리를 누르면 아래와 같이 나온다.
System.Data.SQLite를 검색해서 설치하도록하자.
using AppleSheet.menuCategoryEdit;
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;
namespace AppleSheet
{
...
}
Main Form 쪽에 해당 using 문을 넣어주자.
SQLite를 생성해보자!
그럼 이제 뭔가 만들어보자. 아마 다음과 같은 순서로 진행해야할 것이다.
프로그램을 처음 만들면, .db 파일을 체크하고, 없다면 생성한다.
생성할 때, MainCategory와 SubCategory 테이블을 만든다.
해당 테이블은 다음과 같은 형태를 띄게 한다.
하당 다이어그램은 dbdiagram.io에서 그렸다.
dbdiagram.io - Database Relationship Diagrams Design Tool
dbdiagram.io
이런 형태의 테이블을 가지도록 쿼리를 만들어보자.
string createMainCategoriesTable = @"
CREATE TABLE IF NOT EXISTS MainCategories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
category_index INTEGER NOT NULL,
name TEXT NOT NULL
);";
string createSubCategoryTable = @"
CREATE TABLE IF NOT EXISTS SubCategory (
id INTEGER PRIMARY KEY AUTOINCREMENT,
main_category_id INTEGER NOT NULL,
subcategory_index INTEGER NOT NULL,
name TEXT NOT NULL,
FOREIGN KEY(main_category_id) REFERENCES MainCategories(id)
);";
우선 이 쿼리를 이용하면, 다음과 같은 db를 얻을 수 있다.
SQLite를 사용해보자!
우선 데이터를 저장하는 쿼리를 만들어보자.
foreach (TreeNode mainCategoryNode in rootNode.Nodes)
{
string insertMainCategoryQuery = "INSERT INTO MainCategories (category_index, name) VALUES (@index, @name);";
using (SQLiteCommand command = new SQLiteCommand(insertMainCategoryQuery, connection))
{
command.Parameters.AddWithValue("@index", mainCategoryNode.Index);
command.Parameters.AddWithValue("@name", mainCategoryNode.Text);
command.ExecuteNonQuery();
}
long mainCategoryId = connection.LastInsertRowId;
foreach (TreeNode subCategoryNode in mainCategoryNode.Nodes)
{
string insertSubCategoryQuery = "INSERT INTO SubCategory (main_category_id, subcategory_index, name) VALUES (@mainCategoryId, @index, @name);";
using (SQLiteCommand command = new SQLiteCommand(insertSubCategoryQuery, connection))
{
command.Parameters.AddWithValue("@mainCategoryId", mainCategoryId);
command.Parameters.AddWithValue("@index", subCategoryNode.Index);
command.Parameters.AddWithValue("@name", subCategoryNode.Text);
command.ExecuteNonQuery();
}
}
}
다음과 같은 코드와 쿼리의 조합을 통해서 저장할 수가 있다!
이젠 저장을 했으니 불러오는 쿼리문을 작성해보자.
string selectMainCategoriesQuery = "SELECT id, category_index, name FROM MainCategories ORDER BY category_index;";
using (SQLiteCommand command = new SQLiteCommand(selectMainCategoriesQuery, connection))
using (SQLiteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
TreeNode mainCategoryNode = new TreeNode(reader["name"].ToString())
{
Tag = reader["id"],
Name = reader["name"].ToString()
};
categoriesNode.Nodes.Add(mainCategoryNode);
string selectSubCategoriesQuery = "SELECT subcategory_index, name FROM SubCategory WHERE main_category_id = @mainCategoryId ORDER BY subcategory_index;";
using (SQLiteCommand subCommand = new SQLiteCommand(selectSubCategoriesQuery, connection))
{
subCommand.Parameters.AddWithValue("@mainCategoryId", reader["id"]);
using (SQLiteDataReader subReader = subCommand.ExecuteReader())
{
while (subReader.Read())
{
TreeNode subCategoryNode = new TreeNode(subReader["name"].ToString())
{
Name = subReader["name"].ToString()
};
mainCategoryNode.Nodes.Add(subCategoryNode);
}
}
}
}
}
이렇게 만들면
앞으로 해당 부분은 여기까지하는 것으로 하고, 다음 단계로 넘어가려고 한다.
다음 단계는 실제 데이터를 생성하고 관리하는 것이며, 이 부분은 이후 디자인적인 부분과 카테고리 제거 부분의 나머지 부분
- 카테고리를 제거하면, 실제로 다룰 데이터는 소속된 카테고리를 잃어버린다.
- 보이지 않는 곳에 빈 카테고리를 넣어두고 카테고리 제거 시 다음 중 하나의 동작을 한다.
- 카테고리 내 데이터를 일괄적으로 특정 카테고리로 옮긴다.
- 카테고리 내 데이터를 일괄적으로 빈 카테고리로 옮긴다.
- 카테고리 내 데이터를 일괄적으로 제거한다.
을 고려해야될 때, 추가 진행한다.
나만의 카테고리 다이얼로그 (3)
[C#_시트 프로그램] 나만의 카테고리 다이얼로그 (3)
카테고리 제거카테고리를 제거하는건 앞서 설계했었다.카테고리 제거 시 경고 메시지를 띄운다.상위 카테고리는 하위 카테고리가 있다면, 제거할 수 없다.카테고리를 제거하면, 실제로 다룰 데
apple-churr.tistory.com
'프로그래밍 > C#_시트 프로그램' 카테고리의 다른 글
[C#_시트 프로그램] 데이터를 입력해보자. (2) (0) | 2024.11.27 |
---|---|
[C#_시트 프로그램] 데이터를 입력해보자. (1) (0) | 2024.11.26 |
[C#_시트 프로그램] 나만의 카테고리 다이얼로그 (3) (0) | 2024.11.20 |
[C#_시트 프로그램] 나만의 카테고리 다이얼로그 (2) (1) | 2024.11.19 |
[C#_시트 프로그램] 나만의 카테고리 다이얼로그 (1) (0) | 2024.11.18 |