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

C# 无法添加或更新子行:外键约束失败-在插入1时停止,c#,mysql,C#,Mysql,我想做的是,一旦我插入数据,它不会插入同一个用户两次,因为有多个试验。然而,我得到了上面的错误。用于插入用户的insert语句是 bool userisExist = checkUser(personName, age, gender, handedness, comments); if (!userisExist) { MySqlCommand insertUser = new MySqlCom

我想做的是,一旦我插入数据,它不会插入同一个用户两次,因为有多个试验。然而,我得到了上面的错误。用于插入用户的insert语句是

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.");
              }
我在此期间的插入声明是

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 
            }
我的支票用户是

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。我不希望多次插入同一个用户

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

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

我很确定您不想在
userID
列中插入
NULL
。如果它是一个
自动增量
列,则应将其保留。

故障实际发生的位置。你能把你的代码限制到失败的程度吗