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