色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c# mysql 大批量update

榮姿康1年前11瀏覽0評論

在C#開發(fā)的過程中,使用MySQL關(guān)系型數(shù)據(jù)庫系統(tǒng)更新大批量數(shù)據(jù)是一種常見的需求。采用C#與MySQL進行數(shù)據(jù)交互,可以進行insert、delete、select等操作,都比較常見。但在需要更新大批量數(shù)據(jù)時,使用C#與MySQL進行大批量Update卻會降低程序的運行效率。

為了解決這個問題,可以采用MySQL內(nèi)置的 LOAD DATA INFILE 語句,將需要更新的數(shù)據(jù)導(dǎo)入到臨時表,再使用MySQL的 UPDATE 語句進行批量更新。

以下是一個C#方法,用以實現(xiàn)大批量Update操作。其中需要連接MySQL數(shù)據(jù)庫,使用LOAD DATA INFILE 語句將需要更新的數(shù)據(jù)導(dǎo)入到臨時表中,并使用UPDATE語句進行更新:

public void BatchUpdateMySqlData(DataTable dt, string tableName, string primaryKey, MySqlConnection conn)
{
if (dt.Rows.Count<= 0)
return;
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
MySqlTransaction transaction = null;
try
{
conn.Open();
transaction = conn.BeginTransaction();
string tmpTableName = tableName + "_tmp";
//創(chuàng)建臨時表
cmd.CommandText = string.Format("CREATE TEMPORARY TABLE {0} LIKE {1}", tmpTableName, tableName);
cmd.ExecuteNonQuery();
//將數(shù)據(jù)導(dǎo)入到臨時表
string insertSql = string.Format("LOAD DATA LOCAL INFILE '{0}' INTO TABLE {1} FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n' IGNORE 1 LINES", filePath, tmpTableName);
cmd.CommandText = insertSql;
cmd.ExecuteNonQuery();
//更新數(shù)據(jù)
string updateSql = string.Format("UPDATE {0} AS t INNER JOIN {1} AS tmp ON t.{2}=tmp.{2} SET t.a = tmp.a,t.b = tmp.b", tableName, tmpTableName, primaryKey);
cmd.CommandText = updateSql;
cmd.ExecuteNonQuery();
//刪除臨時表
cmd.CommandText = string.Format("DROP TABLE {0}", tmpTableName);
cmd.ExecuteNonQuery();
transaction.Commit();
}
catch (Exception ex)
{
if (transaction != null)
transaction.Rollback();
throw ex;
}
finally
{
if (conn != null && conn.State == ConnectionState.Open)
conn.Close();
}
}

以上代碼實現(xiàn)了通過C#與MySQL進行大批量數(shù)據(jù)更新的操作。其中將需要更新的數(shù)據(jù)導(dǎo)入到臨時表中,并使用UPDATE語句進行更新。在代碼中使用了MySQL內(nèi)置的 LOAD DATA INFILE 語句,可以有效提高更新大批量數(shù)據(jù)的效率。