Reputation: 35
What I'm trying to do is that, once I insert the data, it won't insert the same user TWICE due to having multiple trials. However, I'm getting the above error. My insert statement for inserting into user is
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.");
}
And my insert statement for gazeperiod is
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
}
And my checkUser is
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;
}
}
Right now, it's only printing the first user, and stops to print the other data as there is already a user with the current ID. I don't want multiple insertions of the same user.
Upvotes: 2
Views: 90
Reputation: 3659
I think the problem is in your INSERT
sql statement:
insertUser.CommandText = "INSERT INTO user (userID, name, age, gender, handedness, comments) VALUES(NULL, @personName , @age , @gender , @handedness , @comments)";
I'm pretty sure you do not want to insert NULL
in the userID
column. If it is an AUTO_INCREMENT
column, you should leave that behind.
Upvotes: 1