问题如下:<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