<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      在ADO.NET中使用事務保護數據的完整性(4)

      [摘要]實施事務既然我們已經看了類和成員,讓我們來看一下基本的實施情況.接下來的代碼是一個簡單的情況,使用事務來保證兩個存儲過程-一個從表中刪除庫存,另一個增加庫存在另個表中,或同時執行,或失。畊sing System;using System.Drawing;using System.Collecti...
      實施事務

      既然我們已經看了類和成員,讓我們來看一下基本的實施情況.接下來的代碼是一個簡單的情況,使用事務來保證兩個存儲過程-一個從表中刪除庫存,另一個增加庫存在另個表中,或同時執行,或失。

      using System;
      using System.Drawing;
      using System.Collections;
      using System.ComponentModel;
      using System.Windows.Forms;
      using System.Data;
      using System.Data.SqlClient;
      using System.Data.SqlTypes;

      …public void SPTransaction(int partID, int numberMoved, int siteID)
      {
      // Create and open the connection.
      SqlConnection conn = new SqlConnection();
      string connString = "Server=SqlInstance;Database=Test;"
      + "Integrated Security=SSPI";
      conn.ConnectionString = connString;
      conn.Open();

      // Create the commands and related parameters.
      // cmdDebit debits inventory from the WarehouseInventory
      // table by calling the DebitWarehouseInventory
      // stored procedure.
      SqlCommand cmdDebit =
      new SqlCommand("DebitWarehouseInventory", conn);
      cmdDebit.CommandType = CommandType.StoredProcedure;
      cmdDebit.Parameters.Add("@PartID", SqlDbType.Int, 0, "PartID");
      cmdDebit.Parameters["@PartID"].Direction =
      ParameterDirection.Input;
      cmdDebit.Parameters.Add("@Debit", SqlDbType.Int, 0, "Quantity");
      cmdDebit.Parameters["@Debit"].Direction =
      ParameterDirection.Input;

      // cmdCredit adds inventory to the SiteInventory
      // table by calling the CreditSiteInventory
      // stored procedure.
      SqlCommand cmdCredit =
      new SqlCommand("CreditSiteInventory", conn);
      cmdCredit.CommandType = CommandType.StoredProcedure;
      cmdCredit.Parameters.Add("@PartID", SqlDbType.Int, 0, "PartID");
      cmdCredit.Parameters["@PartID"].Direction =
      ParameterDirection.Input;
      cmdCredit.Parameters.Add
      ("@Credit", SqlDbType.Int, 0, "Quantity");
      cmdCredit.Parameters["@Credit"].Direction =
      ParameterDirection.Input;
      cmdCredit.Parameters.Add("@SiteID", SqlDbType.Int, 0, "SiteID");
      cmdCredit.Parameters["@SiteID"].Direction =
      ParameterDirection.Input;

      // Begin the transaction and enlist the commands.
      SqlTransaction tran = conn.BeginTransaction();
      cmdDebit.Transaction = tran;
      cmdCredit.Transaction = tran;

      try
      {
      // Execute the commands.
      cmdDebit.Parameters["@PartID"].Value = partID;
      cmdDebit.Parameters["@Debit"].Value = numberMoved;
      cmdDebit.ExecuteNonQuery();

      cmdCredit.Parameters["@PartID"].Value = partID;
      cmdCredit.Parameters["@Credit"].Value = numberMoved;
      cmdCredit.Parameters["@SiteID"].Value = siteID;
      cmdCredit.ExecuteNonQuery();

      // Commit the transaction.
      tran.Commit();
      }
      catch(SqlException ex)
      {
      // Roll back the transaction.
      tran.Rollback();

      // Additional error handling if needed.
      }
      finally
      {
      // Close the connection.
      conn.Close();
      }
      }




      // Commit the outer transaction.

      tran.Commit();

      }

      catch(OleDbException ex)

      {

      //Roll back the transaction.

      tran.Rollback();



      //Additional error handling if needed.

      }

      finally

      {

      // Close the connection.

      conn.Close();

      }

      }





      日韩精品一区二区三区高清