waniwanisan
@waniwanisan

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

シークエンスの作り方

解決したいこと

C#上でテーブルのinsert時、serial型(連番)を持たせたい

例)
登録ボタンのイベントを押した際、データグリッドビューにはuser_id以外6つのデータが保存されるかつSQLテーブルには6つ+連番のuser_idもinsertで登録したい。
シークエンスを組むようですがいまいち分かりません。

発生している問題・エラー

Npgsql.PostgresException: '42804: 列"user_id"は型integerですが、式は型textでした'

該当するソースコード

private void addButton_Click(object sender, EventArgs e)
        {

            // フォームの入力チェック
            if (!isFormCheck())
            {
                MessageBox.Show("氏名を入力してください!!");
                return;
            }
            //denwaDataGrid.RowHeadersVisible = false;

            //string a = this.myouji.Text + this.namae.Text;

            string b = "";

            if (radioButton1.Checked == true)
            {
                b = this.radioButton1.Text;
            }
            else if (radioButton2.Checked == true)
            {
                b = this.radioButton2.Text;
            }

            string c = "";
            if (this.year.Text != "" && this.month.Text != "" && this.day.Text != "")
            {
                c = this.year.Text + "年" + this.month.Text + "月" + this.day.Text + "日";
            }

            string d = "";
            if (this.phone1.Text != "" && this.phone2.Text != "" && this.phone3.Text != "")
            {
                d = this.phone1.Text + "-" + this.phone2.Text + "-" + this.phone3.Text;
            }

            string x = "";
            if (this.postalCode1.Text == "" || this.postalCode2.Text == "")
            {
                x = this.areaBox.Text + this.city.Text + this.town.Text;

            }
            else if (this.postalCode1.Text != "" && this.postalCode2.Text != "")
            {
                x = this.postalCode1.Text + "-" + this.postalCode2.Text + this.areaBox.Text + this.city.Text + this.town.Text;
            }

            string y = this.myouji.Text + this.namae.Text;



            //DataTebleにデータを追加する
            denwaDataSet.denwaDataTable.AdddenwaDataTableRow(
                y,
                b,
                c,
                d,
                this.mail.Text,
                x
                );

            //https://okwave.jp/qa/q5746298.html 参考文献C#からinsert実行

            /*var connString = "Host=localhost;Port=5432;Username=postgres;Password=uw72qdet;Database=denwachou";
            var cmd = new NpgsqlCommand("insert into information values (this.myouji.Text + this.namae.Text, b, c, d, this.mail.Text, x)", conn);
                */



            NpgsqlConnection conn = new NpgsqlConnection
            ("Host=localhost;Port=5432;Username=postgres;Password=uw72qdet;Database=denwachou");


            NpgsqlCommand command = new NpgsqlCommand("insert into information values (:y, :b, :c, :d, :this.mail.Text, :x)", conn); ←第一引数をどうするか?

            command.Parameters.Add(new NpgsqlParameter("y", y));
            command.Parameters.Add(new NpgsqlParameter("b", b));
            command.Parameters.Add(new NpgsqlParameter("c", c));
            command.Parameters.Add(new NpgsqlParameter("d", d));
            command.Parameters.Add(new NpgsqlParameter("this.mail.Text", this.mail.Text));
            command.Parameters.Add(new NpgsqlParameter("x", x));

            conn.Open();
            command.ExecuteNonQuery();

        }

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。スクリーンショット 2021-06-28 182013.png

0

1Answer

デフォルト値を指定するのが簡単だと思います。

明確にするため、列ごと、あるいは行全体についてデフォルト値を明示的に要求することもできます。

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT);
INSERT INTO products DEFAULT VALUES;

serial 型のデフォルト値は新たに採番される値です。

0Like

Your answer might help someone💌