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.