循环数组,进行添加数据,更新的操作时,事务的做法:
首先接收值;
开启事务,
数组循环进行处理;
数组中的数据全部处理完成之后再提交;
/*------------------------------------------------------ */
//-- ecshop 事务处理---批量通过审核
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'batch_finish') {
//批量通过 首先接收值 然后进行判断 只有状态值是0 的时候才能通过 0---1
/* 检查权限 */
admin_priv('surplus_manage');
if (isset($_POST['checkboxes']) && count($_POST['checkboxes']) > 0) {
$withdraw_list = $_POST['checkboxes'];
/* 开始进行事务的处理 */
$db->query('BEGIN');
try {
foreach ($withdraw_list as $key => $id) {
/* 查询当前的预付款信息 */
$account = array();
$account = $db->getRow("SELECT * FROM " . $ecs->table('user_account') . " WHERE id = '$id' FOR UPDATE ");
$amount = $account['amount'];
//如果状态为未确认
if ($account['is_paid'] == 0) {
//点击的是【已完成】,更新此条记录,扣除相应的余额
$admin_note = '已完成';
$is_paid = 1;
update_user_account($id, $amount, $admin_note, $is_paid);
/* 记录管理员日志 */
admin_log('(' . addslashes($_LANG['checks']) . ')' . $admin_note, 'edit', 'user_surplus');
}
}
$db->query('COMMIT');
} catch (Exception $e) {
$db->query('ROLLBACK');
$message = $e->getMessage() ? $e->getMessage() : "操作失败!";
sys_msg($message);
}
/* 提示信息 */
$link[0]['text'] = $_LANG['11_user_withdraw'];
$link[0]['href'] = 'user_withdraw.php?act=list&' . list_link_postfix();
sys_msg($_LANG['attradd_succed'], 0, $link);
} else {
$lnk[] = array('text' => $_LANG['go_back'], 'href' => 'user_withdraw.php?act=list');
sys_msg($_LANG['no_select_id'], 0, $lnk);
}
}
private void button1_Click(object sender, EventArgs e)
{
//Sqlite使用事务批量操作 极大的提高速度
DateTime starttime = DateTime.Now;
using (SQLiteConnection con = new SQLiteConnection(connStr))
{
con.Open();
DbTransaction trans = con.BeginTransaction();//开始事务
SQLiteCommand cmd = new SQLiteCommand(con);
try
{
cmd.CommandText = "INSERT INTO MyTable(username,useraddr,userage) VALUES(@a,@b,@c)";
for (int n = 0; n < 100000; n++)
{
cmd.Parameters.Add(new SQLiteParameter("@a", DbType.String)); //MySql 使用MySqlDbType.String
cmd.Parameters.Add(new SQLiteParameter("@b", DbType.String)); //MySql 引用MySql.Data.dll
cmd.Parameters.Add(new SQLiteParameter("@c", DbType.String));
cmd.Parameters["@a"].Value = "张三" + n;
cmd.Parameters["@b"].Value = "深圳" + n;
cmd.Parameters["@c"].Value = 10 + n;
cmd.ExecuteNonQuery();
}
trans.Commit();//提交事务
DateTime endtime = DateTime.Now;
MessageBox.Show("插入成功,用时" + (endtime - starttime).TotalMilliseconds);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}