2016-03-17 69 views
0

這是我的代碼的一部分,我將數據插入到兩個表中。 表主鍵被定義爲自動增量:: 歌曲表PK是song_id。 文件表PK是File_id。 我想將文件表中的song_id作爲FK插入。 我該怎麼做? 由於如何從通過自動增量創建的表中將主鍵插入第二個表中作爲forign鍵?

try 
{ 
    string MyConnection1 = "datasource=localhost;port=3306;username=root;password=123"; 
    string Query1 = "insert into myproject.song " + 
         "(song_name, house_number, song_text) " + 
         "values " + 
         "('" + line1 + "', '" + paragraphs.Length + 
          "', '" + filetext + "');" + //Insert song name, song huose count and full song text 
        "insert into myproject.file " + 
         "(File_Location, Words_number, Lines_number, File_name, song_id) " + 
         "values " + 
         "('" + strfilename + "','" + words.Length + "','" + 
          totallineCnt + "', '" + fileNameOnly + 
          "', ?????????????;"; //Insert table file details       
    MySqlConnection myConn1 = new MySqlConnection(MyConnection1); 
    MySqlCommand MyCommand1 = new MySqlCommand(Query1, myConn1); 
    MySqlDataReader MyReader1; 
    myConn1.Open(); 
    MyReader1 = MyCommand1.ExecuteReader(); 
    while (MyReader1.Read()) 
    { 
    } 
    myConn1.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 

回答

1

MySQL提供的LAST_INSERT_ID()函數返回一個自動增量列的最後一個值。要使用它,你將執行一個INSERTSELECT函數的值,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 S和SELECT),但我將它作爲一個練習留給讀者。

+0

有沒有更簡單的方法來做taht? –

+0

不是我知道,但正如我所說的C#不是我通常的語言之一。 –

+0

我決定把它作爲主鍵而不是汽車公司。這更容易。不管怎麼說,還是要謝謝你。 –

相關問題