c# - 无法添加或更新子行 : a foreign key constraint fails - stops at 1 insertion

标签 c# mysql

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

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

最佳答案

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

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

我很确定您不想在 userID 列中插入 NULL。如果它是 AUTO_INCREMENT 列,则应将其保留。

关于c# - 无法添加或更新子行 : a foreign key constraint fails - stops at 1 insertion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31822091/

相关文章:

c# - 重新启动位置后如何阻止球体自行移动?

c# - 匹配 STRING 或 STRING 之前的所有内容

c# - 未定义或导入预定义类型“System.ValueTuple´2”

MySQL插入外键使用ID的多个表

php - 如何解码std类对象

mysql - ATK4 如何将 OneToMany retion 与 multiselect 一起使用?

mysql - MYSQL查询之字形方法

c# - 在 Caliburn Micro 的操作中将枚举作为参数传递

c# - Delete(Expression<Func<T, bool>> criteria) MongoDB 查询 C# 驱动程序

php - 将输入保存到数据库