- publicbool Transfer(int transactionAmount, int sourceAccount, int destinationAccount)
- {
- bool result = false;
- // Create the Database object, using the default database service. The
- // default database service is determined through configuration.
- Database db = DatabaseFactory.CreateDatabase();
- // Two operations, one to credit an account, and one to debit another
- // account.
- string sqlCommand = "CreditAccount";
- DBCommandWrapper creditCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand);
- creditCommandWrapper.AddInParameter("@AccountID", DbType.Int32, sourceAccount);
- creditCommandWrapper.AddInParameter("@Amount", DbType.Int32, transactionAmount);
- sqlCommand = "DebitAccount";
- DBCommandWrapper debitCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand);
- debitCommandWrapper.AddInParameter("@AccountID", DbType.Int32, destinationAccount);
- debitCommandWrapper.AddInParameter("@Amount", DbType.Int32, transactionAmount);
- using (IDbConnection connection = db.GetConnection())
- {
- connection.Open();
- IDbTransaction transaction = connection.BeginTransaction();
- try
- {
- // Credit the first account
- db.ExecuteNonQuery(creditCommandWrapper, transaction);
- // Debit the second account
- db.ExecuteNonQuery(debitCommandWrapper, transaction);
- // Commit the transaction
- transaction.Commit();
- result = true;
- }
- catch
- {
- // Rollback transaction
- transaction.Rollback();
- }
- connection.Close();
- return result;
- }
public bool Transfer(int transactionAmount, int sourceAccount, int destinationAccount) { bool result = false; // Create the Database object, using the default database service. The // default database service is determined through configuration. Database db = DatabaseFactory.CreateDatabase(); // Two operations, one to credit an account, and one to debit another // account. string sqlCommand = "CreditAccount"; DBCommandWrapper creditCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand); creditCommandWrapper.AddInParameter("@AccountID", DbType.Int32, sourceAccount); creditCommandWrapper.AddInParameter("@Amount", DbType.Int32, transactionAmount); sqlCommand = "DebitAccount"; DBCommandWrapper debitCommandWrapper = db.GetStoredProcCommandWrapper(sqlCommand); debitCommandWrapper.AddInParameter("@AccountID", DbType.Int32, destinationAccount); debitCommandWrapper.AddInParameter("@Amount", DbType.Int32, transactionAmount); using (IDbConnection connection = db.GetConnection()) { connection.Open(); IDbTransaction transaction = connection.BeginTransaction(); try { // Credit the first account db.ExecuteNonQuery(creditCommandWrapper, transaction); // Debit the second account db.ExecuteNonQuery(debitCommandWrapper, transaction); // Commit the transaction transaction.Commit(); result = true; } catch { // Rollback transaction transaction.Rollback(); } connection.Close(); return result; }
在这段例子代码中,其核心就是关于 IDbTransaction 的使用。
=============================================================
自企业库2.0以后,存储过程的command方式有所改变,自至5.0为止都是如下写法
- Database DataBase = default(Database);
- DbCommand dbCommand = DataBase.GetStoredProcCommand("MCS_GET_SEQUENCE");
- DataBase.AddInParameter(dbCommand, "I_TABLE_NAME", DbType.String, strTable);
- DataBase.AddOutParameter(dbCommand, "O_CUR_SEQUENCE", DbType.Int16,10);
- DataBase.ExecuteNonQuery(dbCommand);
- strSeqNo = Convert.ToInt16(DataBase.GetParameterValue(dbCommand, "O_CUR_SEQUENCE"));
Database DataBase = default(Database); DbCommand dbCommand = DataBase.GetStoredProcCommand("MCS_GET_SEQUENCE"); DataBase.AddInParameter(dbCommand, "I_TABLE_NAME", DbType.String, strTable); DataBase.AddOutParameter(dbCommand, "O_CUR_SEQUENCE", DbType.Int16,10); DataBase.ExecuteNonQuery(dbCommand); strSeqNo = Convert.ToInt16(DataBase.GetParameterValue(dbCommand, "O_CUR_SEQUENCE"));
using connection的写法也变,新版本为
- using (IDbConnection connection = db.CreateConnection())
using (IDbConnection connection = db.CreateConnection())