I have data, about 200,000 rows that need to be written to the database. I wrote this code, but it takes too long to write to the database. Is it possible to insert multiple Values in one request cmd.ExecuteNonQuery(); via Parameters? Or some other way?
string sqlcommand = "INSERT INTO `Mail` ( `threadID`, `mailID`, `UserID`, `UserName`, `mailTime`, `body`) values (@threadID, @mailID, @UserID, @UserName, @mailTime, @body)";
using (MySqlConnection mySqlConnection2 = new MySqlConnection(sqlconnect))
{
mySqlConnection2.Open();
MySqlCommand cmd = mySqlConnection2.CreateCommand();
cmd.CommandText = sqlcommand;
MySqlParameter threadID = new MySqlParameter("@threadID", MySqlDbType.Int32);
MySqlParameter mailID = new MySqlParameter("@mailID", MySqlDbType.Int32);
MySqlParameter UserID = new MySqlParameter("@UserID", MySqlDbType.Int32);
MySqlParameter UserName = new MySqlParameter("@UserName", MySqlDbType.VarChar);
MySqlParameter mailTime = new MySqlParameter("@mailTime", MySqlDbType.DateTime);
MySqlParameter body = new MySqlParameter("@body", MySqlDbType.Text);
cmd.Parameters.Add(threadID);
cmd.Parameters.Add(mailID);
cmd.Parameters.Add(UserID);
cmd.Parameters.Add(UserName);
cmd.Parameters.Add(mailTime);
cmd.Parameters.Add(body);
foreach (Mail_Data data in List)
{
threadID.Value = data.threadID;
mailID.Value = data.mailID;
UserID.Value = data.UserID;
UserName.Value = data.UserName;
mailTime.Value = data.mailTime;
body.Value = data.body;
cmd.ExecuteNonQuery();
}
}
UPD: MySqlBulkLoader is not very suitable, since the data must be taken from a file, but for me it is taken from the server. But the main problem is that this data already contains ,, \r\n, different characters and words in different languages, so it will be problematic to read them from the file and the format will be incorrect and errors will occur.