无法添加或更新子行:外键约束失败 - 在1次插入时停止

时间:2015-08-05 01:43:29

标签: c# mysql

我试图做的是,一旦我插入数据,由于进行了多次试验,它不会插入相同的用户TWICE。但是,我收到了上述错误。我插入用户的插入语句是

bool userisExist = checkUser(personName, age, gender, handedness, comments);
                if (!userisExist)
                {
                  MySqlCommand insertUser = new MySqlCommand();
                  insertUser.Connection = c;
                  insertUser.CommandText = "INSERT INTO user (userID, name, age, gender, handedness, comments) VALUES(NULL, @personName , @age , @gender , @handedness , @comments)";


                  insertUser.Parameters.Add("@personName", MySqlDbType.VarChar).Value = personName;
                  insertUser.Parameters.Add("@age", MySqlDbType.Int64).Value = age;
                  insertUser.Parameters.Add("@gender", MySqlDbType.VarChar).Value = gender;
                  insertUser.Parameters.Add("@handedness", MySqlDbType.VarChar).Value = handedness;
                  insertUser.Parameters.Add("@comments", MySqlDbType.VarChar).Value = comments;
                  insertUser.ExecuteNonQuery();

                  Console.WriteLine("User Data has been inserted.");
              }
              else
              {
                  Console.WriteLine("User Data already exist.");
              }

我对gazeperiod的插入声明是

insertGazePeriod.Connection = c;
              insertGazePeriod.CommandText = "INSERT INTO gazeperiod (gazeID,  duration, userID) VALUES(NULL, @duration , LAST_INSERT_ID())";


              insertGazePeriod.Parameters.Add("@duration", MySqlDbType.Int64).Value = duration;

              insertGazePeriod.ExecuteNonQuery();
              Console.WriteLine("Gaze Period data has been inserted.");
                //END INSERT gazeperiod 
            }

我的checkUser是

private bool checkUser(String personName, String age, String gender, String handedness, String comments)
  {
       try
        {
            int returnValue = -1;
            MySqlCommand selectUser = new MySqlCommand();
            selectUser.Connection = c;
            selectUser.CommandText = "SELECT userID from user WHERE name= @personName AND age = @age AND gender = @gender AND handedness = @handedness AND comments = @comments";

            selectUser.CommandType = CommandType.Text;

            selectUser.Parameters.Add("@personName", MySqlDbType.VarChar).Value = personName;
            selectUser.Parameters.Add("@age", MySqlDbType.Int64).Value = age;
            selectUser.Parameters.Add("@gender", MySqlDbType.VarChar).Value = gender;
            selectUser.Parameters.Add("@handedness", MySqlDbType.VarChar).Value = handedness;
            selectUser.Parameters.Add("@comments", MySqlDbType.VarChar).Value = comments;

             returnValue = (int)selectUser.ExecuteScalar();
             Console.WriteLine("returnValue-" +returnValue);
             return true;

        }
        catch (Exception e)
        {
            Console.WriteLine("returnValue Exception-" + e.ToString());
            return false;
        }
  }

目前,它只打印第一个用户,并停止打印其他数据,因为已有用户拥有当前ID。我不想要同一个用户的多次插入。

1 个答案:

答案 0 :(得分:1)

我认为问题出在你的INSERT sql语句中:

insertUser.CommandText = "INSERT INTO user (userID, name, age, gender, handedness, comments) VALUES(NULL, @personName , @age , @gender , @handedness , @comments)";

我很确定您不希望在NULL列中插入userID。如果是AUTO_INCREMENT列,则应将其留在后面。