概要
System.Data.Sqliteでデータベースにデータテーブルを作成します。
WPFで作成していますが、MVVMな書き方にはなっていません。
コードは「データテーブル作成」に関連したコード”のみ”記載してしますのでご注意ください。
XAML, コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<Window x:Class="SysDataSQLiteTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:SysDataSQLiteTest" mc:Ignorable="d" Title="MainWindow" Height="205" Width="400"> <Grid> <StackPanel > <StackPanel > <Menu x:Name="menu" > <MenuItem Header="メニュー" > <MenuItem Header="DBfフォルダを開く" Click="MenuItem_Click" /> </MenuItem> </Menu> </StackPanel> <StackPanel Orientation="Horizontal" Margin="10,10,10,0"> <StackPanel Margin="0,0,10,0" > <TextBox x:Name="textbox_dbpath" Text="./SysDataSQLiteTest.db" Margin="0,0,0,5" /> <Button x:Name="btn_createDataBase" Content="DBを作成する" Click="Btn_createDataBase_Click" Margin="0,0,0,5"/> <Button x:Name="btn_createTable" Content="Tableを作成する" Click="Btn_createTable_Click" Margin="0,0,0,5"/> <Button x:Name="btn_addToTable" Content="行を挿入" Click="Btn_addToTable_Click" Margin="0,5,0,5"/> </StackPanel> <StackPanel > <Button x:Name="btn_readTable" Content="Tableを読込む" Click="Btn_readTable_Click" Margin="0,0,0,5"/> <DataGrid x:Name="dataGrid" MinHeight="100" MinWidth="100" Margin="0,0,0,0" ItemsSource="{Binding}"/> </StackPanel> </StackPanel> </StackPanel> </Grid> </Window> |
コード (MainWindow.xaml.cs)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
using System; using System.Windows; namespace SysDataSQLiteTest { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { // クラスのインスタンス Class_sysdataSQLite cl_sysSQL = new Class_sysdataSQLite(); public MainWindow() { InitializeComponent(); } /// <summary> /// データベースにテーブルを作成 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Btn_createTable_Click(object sender, RoutedEventArgs e) { try { cl_sysSQL.createTable(textbox_dbpath.Text); } catch (Exception ex) { string message = ""; message = ex.Message; #if DEBUG message = message + Environment.NewLine + ex.ToString(); #endif MessageBox.Show(message); } } } } |
コード (クラス: Class_sysdataSQLite)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using System; using System.Windows; namespace SysDataSQLiteTest { class Class_sysdataSQLite { /// <summary> /// テーブルを作成する /// </summary> /// <param name="databasePath">ターゲットデータベースのパス</param> public void createTable(string databasePath) { try { string connectionChar = $"Data Source={databasePath}"; using (System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection(connectionChar)) { // データベースに接続 conn.Open(); // コマンドの実行 using (var command = conn.CreateCommand()) { // テーブルが存在しなければ作成する command.CommandText = // $"CREATE TABLE Proj (ID INTEGER PRIMARY KEY, Name TEXT, StartDate TEXT, EndDate TEXT)"; $"CREATE TABLE IF NOT EXISTS Proj (ID INTEGER PRIMARY KEY, Name TEXT, StartDate TEXT, EndDate TEXT)"; command.ExecuteNonQuery(); } } } catch (Exception ex) { string message = ""; message = ex.Message; #if DEBUG message = message + Environment.NewLine + ex.ToString(); #endif MessageBox.Show(message); } } } } |
補足
- 「Proj」という名称のテーブルを作成して、「ID:INTEGER型 プライマリキー、Name:TEXT型、StartDate:TEXT型、EndDate:TEXT型」の列を作成しています。
- コメントアウトしている記述
「$”CREATE TABLE Proj (ID INTEGER PRIMARY KEY, Name TEXT, StartDate TEXT, EndDate TEXT)”;」
だと、データベースに同じ名称のテーブルが存在すると例外を出してしまいます。
そこで、「CREATE TABLE IF NOT EXISTS 」というSQL文で既にテーブルがある場合を回避します。
連載記事
- C#でSystem.Data.Sqliteを使用する ー 導入編 ー | Invisible Works
- [] System.Data.Sqliteをインストールする。 | Invisible Works
- [] System.Data.Sqliteでデータベースを作成する。 | Invisible Works
- [] System.Data.Sqliteでデータベースにデータテーブルを作成する。 | Invisible Works
- [] System.Data.Sqliteでデータベースを読み込んでDataGridに表示する | Invisible Works
- [] System.Data.Sqliteでデータベースのテーブルに行(レコード)を追加する。 | Invisible Works
- [] System.Data.Sqliteでデータベース内のテーブルを、データテーブルを介してDataGridに読み込み、更新する (DataAdapterを使用) | Invisible Works
- System.Data.Sqliteでテーブル間のリレーションシップを設定する。
- [] [C#][WPF][SQLite] System.Data.Sqliteでテーブル間の結合してデータを抽出する。- 内部結合編 – | Invisible Works
- [] [C#][WPF][SQLite] System.Data.Sqliteでテーブル間の結合してデータを抽出する。- 外部結合編 – | Invisible Works
- [] [C#][WPF][SQLite] System.Data.Sqliteでテーブル間の結合してデータを抽出する。- 交差結合編 – | Invisible Works
- [] [C#][WPF][SQLite] System.Data.Sqliteで中間テーブルを利用して、1対多、多対多のテーブル結合を行う。 | Invisible Works
- [to be drafted] トランザクション処理したい
コメント