0

この問題があります。外部キーで接続された 2 つのテーブルを MySql に作成します。C# からテーブルにデータを挿入したい。

table person
id - int、自動インクリメント、主キー
first_name - varchar
last_name - varchar

テーブル アドレス
id - 自動インクリメント、主キー
city - varchar
steet_number - varchar
person_id - 外部キー

  string mySqlString = "server=localhost;uid=root;pwd=root;database=address_book;";
    MySqlConnection conn = new MySqlConnection(mySqlString);
    try
    {
        conn.Open();

        string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name)";
        string insertAddress = "INSERT INTO addresses(city, street_number, persons_id) VALUES (@city, @street_number, @persons_id)";

        MySqlCommand command = new MySqlCommand(insertPerson, conn);
        MySqlCommand secondCommand = new MySqlCommand(insertAddress, conn);

        command.Parameters.AddWithValue("@first_name", TextBox1.Text);
        command.Parameters.AddWithValue("@last_name", TextBox2.Text);
        int id = Convert.ToInt32(command.LastInsertedId);

        command.ExecuteNonQuery();

        secondCommand.Parameters.AddWithValue("@city", TextBox3.Text);
        secondCommand.Parameters.AddWithValue("@street_number", TextBox4.Text);
        secondCommand.Parameters.AddWithValue("@persons_id", id);

        secondCommand.ExecuteNonQuery();
    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        conn.Clone();
    }

しかし、これは機能していません。主キーから最後に挿入された値を取得して、その値を列「persons_id」に挿入するにはどうすればよいですか? それとも、どこか間違っているのでしょうか?

4

1 に答える 1

1

一度LAST_INSERT_ID()に、クエリで直接使用できます。

string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name);"
                    + "INSERT INTO addresses(city, street_number,persons_id) VALUES (@city, @street_number, LAST_INSERT_ID());";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
command.Parameters.AddWithValue("@city", TextBox3.Text);
command.Parameters.AddWithValue("@street_number", TextBox4.Text);
command.ExecuteNonQuery();

または、2 つのコマンド 1 を実行して人物を挿入して ID を取得し、もう 1 つのコマンドを実行して住所を挿入することもできます。

string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name)";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
command.ExecuteNonQuery();
int id = Convert.ToInt32(command.LastInsertedId);

別の方法は、次のように二重クエリを使用することです。

string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name); SELECT last_insert_id();";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
int id = Convert.ToInt32(comm.ExecuteScalar());

idその後、次のクエリで結果を使用できます。

于 2013-07-14T14:06:43.097 に答える