提问时间: 2007-11-20 13:40
悬赏分:50 浏览:446 次
问题如下:
需要对2个表一个音乐专辑表A,一个专辑曲目表B进行操作~步骤:
1.插入新数据到A表中。2.根据插入数据所生成的ID主键(自增长)对该行中的一个字段进行更新。3.根据上面的ID添加表B,B表3个主要字段,对应专辑ID(也就是插入数据所生成的ID主键),曲目名称,曲目URL,(曲目名称和曲目URL都是通过AJAX的POST方法传递,用户添加的个数不能确定,也就是可能N个曲目)。数据添加完成后同时生成HTML静态文件(其中存放路径的构成需要用到ID,要对ID进行MD5),所有动作都需要在一个事物里面完成。
现在的问题是:
如何在一个事务里面完成。
因为以前有些简单的,参数可以确定的,可以用存储过程来实现~现在需要在.cs代码中实现。
我说下我的实现方法。
1.首先,我设计了一个TransHelper类,如下:
public class TransHelper
{
private SqlTransaction _Tranaction = null;
private SqlConnection _Connection = null;
public void BeginTranaction(SqlConnection SConnection)
{
_Connection = SConnection;
_Connection.Open();
_Tranaction = _Connection.BeginTransaction();
}
public void BeginTranaction(string ConnectionString)
{
_Connection = new SqlConnection(ConnectionString);
_Connection.Open();
_Tranaction = _Connection.BeginTransaction();
}
public SqlTransaction Tranaction
{
get
{
return _Tranaction;
}
}
public SqlConnection Connection
{
get
{
return _Connection;
}
}
&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