如何从一个通过自动增量创建的表中插入主键到第二个表作为forign键?

时间:2016-03-17 01:52:08

标签: c# mysql

这是我的代码的一部分,我将数据插入到两个表中。 表主键定义为自动增量:: 歌曲表PK是song_id。 文件表PK是File_id。 我想将song_id作为FK插入到文件表中。 我该怎么办? 感谢

class Ball {
  constructor(x, y, r, sAngle, rAngle) {
    this.x = x;
    this.y = y;
    this.r = r;
    this.sAngle = sAngle;
    this.rAngle = rAngle;
    this.speed = null;
  }

  drawBall() {
    ctx.beginPath();
    ctx.arc(this.x, this.y, this.r, this.sAngle, this.rAngle);
    ctx.fillStyle = "#FF0000";
    ctx.fill();
  }
  moveBall() {
    this.x += this.speed;

  }
}

var greenBall = new Ball(0, 0 , 10, 0, 0);

greenBall.speed = 5;

greenBall.moveBall();

document.write(greenBall.x);

1 个答案:

答案 0 :(得分:1)

MySQL提供LAST_INSERT_ID()函数,该函数返回autoincrement列的最后一个值。要使用它,您将执行一个 INSERT SELECT 该函数的值,并 INSERT 将值返回到第二个表中。

您还应该使用预准备语句而不是动态SQL,原因很多,我不会在这里讨论。

我对C#并不十分满意,但我会试一试:

string MyConnection1 = "datasource=localhost;port=3306;username=root;password=123";
string Query1 = "insert into myproject.song " +
                    "(song_name, house_number, song_text) " +
                  "values " +
                    "(@SongName, @HouseNum, @SongText)"; //Insert song name, song huose count and full song full text

string Query2 = "SELECT LAST_INSERT_ID()";

string Query3 = "insert into myproject.file " +
                    "(File_Location, Words_number, Lines_number, File_name, song_id) " +
                  "values " +
                    "(@FileLoc, @WordCount, @LineCount, @FileName, @SongId";  //Insert the table file details                          

try
{
    MySqlConnection myConn1 = new MySqlConnection(MyConnection1);
    myConn1.Open();

    MySqlCommand Cmd1 = new MySqlCommand(Query1, myConn1);
    Cmd1.Parameters.AddWithValue("@SongName", line1);
    Cmd1.Parameters.AddWithValue("@HouseNum", paragraphs.Length);
    Cmd1.Parameters.AddWithValue("@SongText", filetext);
    Cmd1.ExecuteNonQuery();

    MySqlCommand Cmd2 = new MySqlCommand(Query2, myConn1);
    object result = Cmd2.ExecuteScalar();
    int songId = Convert.ToInt32(result);

    MySqlCommand Cmd3 = new MySqlCommand(Query3, myConn1);
    Cmd3.Parameters.AddWithValue("@FileLoc", strfilename);
    Cmd3.Parameters.AddWithValue("@WordCount", words.Length);
    Cmd3.Parameters.AddWithValue("@LineCount", totallineCnt);
    Cmd3.Parameters.AddWithValue("@FileName", fileNameOnly);
    Cmd3.Parameters.AddWithValue("@SongId", songId);
    Cmd3.ExecuteNonQuery();

    myConn1.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

这可能与语法错误有关,但应该给你足够的大纲来开始。

此外,你真的应该在一个交易中包装整个操作(两个 INSERT 和一个 SELECT ),但我离开了作为读者的练习。