C# postgres連携コード

```Form1.cs
using System.Data;
using System.Diagnostics;
using System.Data.SQLite;
using Microsoft.Data.Sqlite;
using System.Globalization;

namespace DB_SQLite1
{
    public partial class Form1 : Form
    {

        int selectedRowIndex = 0;

        public Form1()
        {
            InitializeComponent();
        }

        // プロパティを使って子フォームからアクセスできるようにする
        // ■thisとこれがないとサブフォームからアクセスできない(重要)■
        //public string TextBoxValue
        //{
        //    get { return textBox1.Text; }
        //    set { textBox1.Text = value; }
        //}

        //■追加ボタン押下
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(this,"新規");
            form2.ShowDialog();
            UpdateList();
        }

        //■終了ボタン押下
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //初回表示
        private void Form1_Load(object sender, EventArgs e)
        {
            UpdateList();
        }

        //DataGridView更新処理
        public void UpdateList()
        {
            // 接続先情報（bin/Debugフォルダ内に「test.sqlite」という名前でDBが作成される）
            var connectionString = "Data Source=test.sqlite";

            // 接続やSQL実行に必要なインスタンスの生成
            using (var connection = new SQLiteConnection(connectionString))
            using (var command = connection.CreateCommand())
            {
                // 接続開始
                connection.Open();

                // SELECT文の実行
                command.CommandText = "SELECT * FROM users;";

                using (var reader = command.ExecuteReader())
                {
                    //データテーブル作成
                    var dt = new DataTable();
                    //データテーブルにSQL結果読み込み
                    dt.Load(reader);
                    //データグリッドビューとデータテーブルバインド
                    this.dataGridView1.DataSource = dt;

                    // 結果を表示
                    foreach (var row in dt.AsEnumerable())
                        Debug.WriteLine($"TestData---, {row["name"]}");
                }
            }
        }

        //■更新ボタン押下
        private void button5_Click(object sender, EventArgs e)
        {
            UpdateList();
        }

        //■削除ボタン押下
        private void button3_Click(object sender, EventArgs e)
        {

            string selectedValue = "";

            // 現在選択されている行があるかどうか確認
            if (dataGridView1.CurrentRow != null)
            {
                // 選択された行のインデックスを取得
                int selectedRowIndex = dataGridView1.CurrentRow.Index;

                // 選択された行の特定のセルの値を取得
                selectedValue = dataGridView1.Rows[selectedRowIndex].Cells["id"].Value.ToString();

                // 値を使った処理（例: メッセージボックスに表示）
                MessageBox.Show($"選択されたID: {selectedValue}");
            }
            else
            {
                // 行が選択されていない場合のエラーメッセージ
                MessageBox.Show("行が選択されていません。");
                return;
            }

            // メッセージボックスを表示し、Yes/Noを選択
            DialogResult result = MessageBox.Show("本当に実行しますか？", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            // クリックされたボタンに応じた分岐処理
            if (result == DialogResult.No)
            {
                // Noがクリックされた場合の処理
                MessageBox.Show("キャンセルされました。");
                return;
            }

            //■以下DB削除処理
            // 接続先情報（bin/Debugフォルダ内に「test.sqlite」という名前でDBが作成される）
            var connectionString = "Data Source=test.sqlite";

            // 接続やSQL実行に必要なインスタンスの生成
            using (var connection = new SQLiteConnection(connectionString))
            {
                connection.Open();

                // データを削除する
                string sql = "DELETE FROM users WHERE id = @id";
                using (var command = new SQLiteCommand(sql, connection))
                {
                    // パラメータに値を追加
                    command.Parameters.AddWithValue("@id", selectedValue);

                    // クエリを実行
                    command.ExecuteNonQuery();
                }

            }

            //データグリッドビュー更新
            UpdateList();

            MessageBox.Show("削除しました");
        }

        //■変更ボタン押下
        private void button2_Click(object sender, EventArgs e)
        {
            string selectedValue = "";

            // 選択された行のインデックスを取得
            int selectedRowIndex = dataGridView1.CurrentRow.Index;


            // 現在選択されている行があるかどうか確認
            if (dataGridView1.CurrentRow != null)
            {

                // 選択された行の特定のセルの値を取得
                selectedValue = dataGridView1.Rows[selectedRowIndex].Cells["id"].Value.ToString();

                // 値を使った処理（例: メッセージボックスに表示）
                MessageBox.Show($"選択されたID: {selectedValue}");
            }
            else
            {
                // 行が選択されていない場合のエラーメッセージ
                MessageBox.Show("行が選択されていません。");
                return;
            }


            Form2 form2 = new Form2(this,"変更");

            //プロパティやメソッド経由でアクセスする方法
            form2.TextBoxValue1 = dataGridView1.Rows[selectedRowIndex].Cells["class"].Value.ToString();
            form2.TextBoxValue2 = dataGridView1.Rows[selectedRowIndex].Cells["name"].Value.ToString();
            form2.TextBoxValue3 = dataGridView1.Rows[selectedRowIndex].Cells["cost"].Value.ToString();
            form2.TextBoxValue4 = dataGridView1.Rows[selectedRowIndex].Cells["id"].Value.ToString();

            form2.ShowDialog();
            UpdateList();

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}
```

```Form2.cs

using System.Data.SQLite; // System.Data.SQLiteを使用

namespace DB_SQLite1
{
    public partial class Form2 : Form
    {
        Form1 _form1;
        private string _checkBtn;
        private string _id;

        public Form2(Form1 form1 , string checkBtn)
        {
            InitializeComponent();
            _form1 = form1;
            _checkBtn = checkBtn;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //■新規登録処理
            if (_checkBtn == "新規")
            {
                    MessageBox.Show("新規が押されました");
                // 必要なフィールドが入力されているか確認
                if (bunrui.Text == "" || hinmei.Text == "" || kingaku.Text == "0")
                {
                    MessageBox.Show("適切に登録してください");
                    return;
                }

                // 接続先情報（bin/Debugフォルダ内に「test.sqlite」という名前でDBが作成される）
                var connectionString = "Data Source=test.sqlite";

                // 接続やSQL実行に必要なインスタンスの生成
                using (var connection = new SQLiteConnection(connectionString))
                {
                    connection.Open();

                    // SQL文を準備
                    string sql = "INSERT INTO users (class, name, cost, date) VALUES (@class, @name, @cost, @date);";
                    using (var command = new SQLiteCommand(sql, connection))
                    {
                        // パラメータに値を追加
                        command.Parameters.AddWithValue("@class", bunrui.Text);  // bunrui.ItemsからTextに修正
                        command.Parameters.AddWithValue("@name", hinmei.Text);
                        command.Parameters.AddWithValue("@cost", kingaku.Text);
                        command.Parameters.AddWithValue("@date", calendar1.SelectionRange.Start.ToString("yyyy-MM-dd"));  // 日付をフォーマットして格納

                        // クエリを実行
                        command.ExecuteNonQuery();
                    }

                    MessageBox.Show("登録しました");
                    // Form1の更新メソッドを呼び出す

                }
            }

            //■変更登録処理
            if (_checkBtn == "変更")
            {
                MessageBox.Show("変更が押されました");
               

                // 必要なフィールドが入力されているか確認
                    if (bunrui.Text == "" || hinmei.Text == "" || kingaku.Text == "0")
                {
                    MessageBox.Show("適切に登録してください");
                    return;
                }

                // 接続先情報（bin/Debugフォルダ内に「test.sqlite」という名前でDBが作成される）
                var connectionString = "Data Source=test.sqlite";

                // 接続やSQL実行に必要なインスタンスの生成
                using (var connection = new SQLiteConnection(connectionString))
                {

                    // SQL文を準備
                    string sql = "UPDATE users SET class = @class , name = @name , cost = @cost , date = @date  WHERE id = @id";
                    using (var command = new SQLiteCommand(sql, connection))
                    {
                        // パラメータに値を追加
                        command.Parameters.AddWithValue("@class", bunrui.Text);  // bunrui.ItemsからTextに修正
                        command.Parameters.AddWithValue("@name", hinmei.Text);
                        command.Parameters.AddWithValue("@cost", kingaku.Text);
                        command.Parameters.AddWithValue("@date", calendar1.SelectionRange.Start.ToString("yyyy-MM-dd"));
                        command.Parameters.AddWithValue("@id", _id);

                        //MessageBox.Show("_id"+_id);
                        connection.Open();
                        command.ExecuteNonQuery();
                    }


                }
            }
        }

        public string TextBoxValue1
        {
            get { return bunrui.Text; }
            set { bunrui.Text = value; }
        }
        public string TextBoxValue2
        {
            get { return hinmei.Text; }
            set { hinmei.Text = value; }
        }
        public string TextBoxValue3
        {
            get { return kingaku.Text; }
            set { kingaku.Text = value; }
        }
        public string TextBoxValue4
        {
            get { return _id; }
            set { _id = value; }
        }

    }
}

```