问题如下:<br>需要对2个表一个音乐专辑表A,一个专辑曲目表B进行操作~步骤:<br>1.插入新数据到A表中。2.根据插入数据所生成的ID主键(自增长)对该行中的一个字段进行更新。3.根据上面的ID添加表B,B表3个主要字段,对应专辑ID(也就是插入数据所生成的ID主键),曲目名称,曲目URL,(曲目名称和曲目URL都是通过AJAX的POST方法传递,用户添加的个数不能确定,也就是可能N个曲目)。数据添加完成后同时生成HTML静态文件(其中存放路径的构成需要用到ID,要对ID进行MD5),所有动作都需要在一个事物里面完成。<br>现在的问题是:<br>如何在一个事务里面完成。<br>因为以前有些简单的,参数可以确定的,可以用存储过程来实现~现在需要在.cs代码中实现。<br>我说下我的实现方法。<br>1.首先,我设计了一个TransHelper类,如下:<br> public class TransHelper<br>    {<br>        private SqlTransaction _Tranaction = null;<br>        private SqlConnection _Connection = null;<br><br>        public void BeginTranaction(SqlConnection SConnection)<br>        {<br>            _Connection = SConnection;<br>            _Connection.Open();<br>            _Tranaction = _Connection.BeginTransaction();<br>        }<br><br>        public void BeginTranaction(string ConnectionString)<br>        {<br>            _Connection = new SqlConnection(ConnectionString);<br>            _Connection.Open();<br>            _Tranaction = _Connection.BeginTransaction();<br>        }<br><br>        public SqlTransaction Tranaction<br>        {<br>            get<br>            {<br>                return _Tranaction;<br>            }<br>        }<br><br>        public SqlConnection Connection<br>        {<br>            get<br>            {<br>                return _Connection;<br>            }<br>        }<br> &nbs
        
        
            
                    
                        问题补充:
                        
 public void CloseTranaction(bool IsSuccess)
        {
            if (_Tranaction != null)
            {
                if (IsSuccess)
                {
                    _Tranaction.Commit();
                }
                else
                {
                    _Tranaction.Rollback();
                }
                if (_Connection.State == ConnectionState.Open)
                {
                    _Connection.Close();
                }
                _Connection.Dispose();
            }
        }
    }
}
2.在aspx.cs里面的代码如下:
 int intMusicAlbumID = 0;
            using (CBase cbase = new CBase())//链接字符串的基类
            {
                bool addMusic = false;
                t.BeginTranaction(cbase.ConnectionString);
                if (MusicAlbum.Add(Server.HtmlDecode(txtMusicAlbumContent.Text.Trim()), out intMusicAlbumID, t.Tranaction))
                { if (MusicAlbum.UpdateCovAddrAndShtmlUrl())
                    { CB_MusicSpecialItem musicItem = new CB_MusicSpecialItem();
                        addMusic = musicItem.Add();
                    }
                }t.CloseTranaction(addMusic);
            }
说明:
MusicAlbum.Add(Server.HtmlDecode(txtMusicAlbumContent.Text.Trim()), out intMusicAlbumID, t.Tranaction)
这个方法添加A表数据,返回主键ID(自增量),同时传递一个tranaction对象进去.
这个方法代码如下:
public bool Add(string MusicAlbumContent,out int MusicAlbumID,SqlTransaction sTransaction)
    {
        SqlConnection conn;
        bool blnResult;
        MusicAlbumID = 0;
        if ((strConnectString != ""))
        {
            conn = new SqlConnection(strConnectString);
            try
            {
                conn.Open();
                try
                {
                    SqlCommand cmd = new SqlCommand("p_viktor_B_MusicSpecialAdd", conn);
cmd.Transaction = sTransaction;//这里指定传递的transaction
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter RETUR