在多个SQL查询上应用事务

时间:2016-08-11 07:00:48

标签: c# sql transactions

如何在单个函数中使用事务进行多次插入和更新查询?例如:

private void button1_Click(object sender, EventArgs e)
    {
        // transaction
        SqlConnection objConnection = new SqlConnection(annual_examination_system.Properties.Settings.Default.connString);
        SqlTransaction objTransaction = null;

        int count = 0;

        try 
        {
          objConnection.Open();
          objTransaction = objConnection.BeginTransaction();

          string q1 = "update query"
          SqlCommand objCommand1 = new SqlCommand(q1, objConnection, objTransaction);
          objCommand1.ExecuteNonQuery();
          objTransaction.Commit();

          string q2 = "insert query"
          SqlCommand objCommand1 = new SqlCommand(q2, objConnection, objTransaction);
          objCommand1.ExecuteNonQuery();
          objTransaction.Commit();
        }

        catch (Exception ex)
        {
           objTransaction.Rollback();
            MessageBox.Show(ex.Message);
            MessageBox.Show("Exception, Row :" + count);
            MessageBox.Show("Transaction Rollback.");
        }

        finally
        {
            // Close the connection.
            if (objConnection.State == ConnectionState.Open)
            {
                objConnection.Close();
            }
        }

现在有两个查询用于更新,一个用于插入。那么我必须单独对它们进行交易,还是可以同时应用一项交易?

1 个答案:

答案 0 :(得分:2)

您可以对两个查询使用相同的事务。 这是一个例子:

SqlTransaction tran;

现在将这个用于两个查询

using(SqlConnection connection=new SqlConnection(connection_string))
{
    connection.Open();
    tran = connection.BeginTransaction();
    cmd = new SqlCommand(query1, connection, tran);
    cmd1 = new SqlCommand(query2, connection, tran);
    count = cmd.ExecuteNonQuery();
    count = count + cmd1.ExecuteNonQuery();
    tran.Commit();
}

更新:连接没有关闭,这就是问题所在。我编辑了代码。请参阅更新。