举一个在A和B账户间转账的例子,比较简单:
using
System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.EnterpriseServices; // 用于支持事务
using System.Data.SqlClient; // 用于数据库操作
[WebService(Namespace = " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
... ... {
public Service () ......{
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod(TransactionOption = TransactionOption.RequiresNew)]
public string TransferMoneyFromAToB(int m)
......{
try
......{
ContextUtil.EnableCommit();
this.TransferOutFromA(m);
this.TransferInToB(m);
ContextUtil.SetComplete();
return "搞定!";
}
catch (Exception e)
......{
ContextUtil.SetAbort();
return "糟糕!"+e.Message;
}
}
private void TransferOutFromA(int num)
......{
SqlConnection conn = new SqlConnection("server=.;database=Account;uid=sa;pwd=;");
conn.Open();
SqlCommand sc = new SqlCommand("update AccountTransfer set money=money-"+num+" where accountname='A'",conn);
sc.ExecuteNonQuery();
conn.Close();
//throw new Exception("机器出现故障,抱歉!"); //*****************
}
private void TransferInToB(int num)
......{
SqlConnection conn = new SqlConnection("server=.;database=Account;uid=sa;pwd=;");
conn.Open();
SqlCommand sc = new SqlCommand("update AccountTransfer set money=money+"+num+" where accountname='B'",conn);
sc.ExecuteNonQuery();
conn.Close();
}
}
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.EnterpriseServices; // 用于支持事务
using System.Data.SqlClient; // 用于数据库操作
[WebService(Namespace = " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
... ... {
public Service () ......{
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod(TransactionOption = TransactionOption.RequiresNew)]
public string TransferMoneyFromAToB(int m)
......{
try
......{
ContextUtil.EnableCommit();
this.TransferOutFromA(m);
this.TransferInToB(m);
ContextUtil.SetComplete();
return "搞定!";
}
catch (Exception e)
......{
ContextUtil.SetAbort();
return "糟糕!"+e.Message;
}
}
private void TransferOutFromA(int num)
......{
SqlConnection conn = new SqlConnection("server=.;database=Account;uid=sa;pwd=;");
conn.Open();
SqlCommand sc = new SqlCommand("update AccountTransfer set money=money-"+num+" where accountname='A'",conn);
sc.ExecuteNonQuery();
conn.Close();
//throw new Exception("机器出现故障,抱歉!"); //*****************
}
private void TransferInToB(int num)
......{
SqlConnection conn = new SqlConnection("server=.;database=Account;uid=sa;pwd=;");
conn.Open();
SqlCommand sc = new SqlCommand("update AccountTransfer set money=money+"+num+" where accountname='B'",conn);
sc.ExecuteNonQuery();
conn.Close();
}
}