将值插入外键MySQLCommand C#

时间:2014-12-17 11:54:58

标签: c# mysql sql-server database

我一直在尝试不同的方法来让我的代码工作。

我对c#和DB都很新。但问题是我正在尝试为音乐事件修复数据库,我在其中添加了乐队名称和成员。

我有2张桌子。一个有乐队,一个有乐队成员。我在visual studio C#中使用MySQLCommand

我将代码插入MySQL类的按钮代码

    private void bt_LäggTill_Band_Medlem_Click(object sender, EventArgs e)
    {
        MySql mySQL = new MySql();
        MySqlConnection myConn = mySQL.GetServer();
       // string insert = @"Insert Into BandMedlemar(BNamn , MedlemsNamn)Values ('" + cb_Band_Medlemar.Text.ToString() + "',(Select BNamn from Band Where BNamn = '" + cb_Band_Namn.Text.ToString() + "'))";
    //    string insert = "Insert Into BandMedlemar(MedlemsNamn , BNamn) Select val.MedlemsNamn , f.BNamn from (Values ('" + cb_Band_Medlemar.Text.ToString() + "','" + cb_Band_Namn.Text.ToString() + "')) val(MedlemsNamn,BNamn) Left Join Band f Useing (BNamn)";
        string insert = 
            "Insert Into BandMedlemar(MedlemsNamn , BNamn) " +
        "Select '" + cb_Band_Medlemar.Text.ToString() + "' , BNamn " +
        "From Band Where BNamn='" + cb_Band_Namn.Text.ToString() + "'";
        int count = 1;
        string para = cb_Band_Medlemar.Text.ToString().Replace(" ", "");
        string para2 =cb_Band_Medlemar.Text.ToString();
        mySQL.Insert(myConn, insert, count, para, para2);
        Update();
    }

我尝试了几件让他们在那里的东西。

然后我的SQL代码将数据结束发送到数据库

    public void Insert(MySqlConnection myConn , string text , int count , string para , string para2)
    {
        try
        {
            myConn.Open();
            MySqlCommand cmd = new MySqlCommand(text, myConn);
            //cmd.Connection = myConn;
            //cmd.CommandText = text;
            cmd.Prepare();
            string[] splited = para.Split('@');
            string[] splited2 = para2.Split('@');
            int number = 0;
            while (count != 0)
            {
                cmd.Parameters.AddWithValue("@" + splited[number], splited2[number]);
                count--;
                number++;
            }
            cmd.ExecuteNonQuery();
            myConn.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            myConn.Close();
        }
    }

代码也适用于带有多个参数的普通插入。

了解更多信息,我发布了乐队成员的创建表

CREATE TABLE BandMedlemar 
( BNamn varchar(20) NOT NULL default '',MedlemsNamn varchar(30) NOT NULL, 
  Info varchar(50) default NULL, PRIMARY KEY (BNamn), 
  CONSTRAINT BandMedlemar_ibfk_1 FOREIGN KEY (BNamn) REFERENCES Band (BNamn) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8

由于存在主键外键关系,请帮助我如何添加乐队中的一个以上成员

请给我正确的解决方案,因为我没有得到它。

1 个答案:

答案 0 :(得分:0)

BNamn是BandMedlemmar表中的主键。 将主键更改为PRIMARY KEY(BNamn,MedlemsNamn),然后重试。

请不要连接字符串来构建SQL,你会被黑客入侵。请改用参数。