我试图做的是,一旦我插入数据,由于进行了多次试验,它不会插入相同的用户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。我不想要同一个用户的多次插入。
答案 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
列,则应将其留在后面。