高分求解一个关于C#的事务处理问题,使用的是TransactionScope类 100

数据访问层有三个方法:publicboolExcuteCommand(stringsqlStr,SqlParameter[]param))——位于DBHelper类{tr... 数据访问层有三个方法:
public bool ExcuteCommand(string sqlStr, SqlParameter[] param))——位于DBHelper类
{
try
{
conn.Open();
SqlCommand cmd = new SqlCommand(sqlStr, conn);
cmd.Parameters.AddRange(param);
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
finally
{
conn.Close();
}
}

DBHelper dh = new DBHelper();

public bool AddUser(string userName, string userPassword)——位于UserDAL类
{
string sqlStr = "insert into TB_User values(@UserName,@UserPassword,@UserType)";
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@UserName",userName),
new SqlParameter("@UserPassword",userPassword),
new SqlParameter("@UserType","一般用户"),
};
bool b = dh.ExcuteCommand(sqlStr, param);
return b;
}

public bool AddUserInfo(string userName))——位于UserDAL类
{
string sqlStr = "insert into TB_UserInfo values(@UserName,@Name,@Hometown,@PhoneNumber,@EMail)";
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter("@UserName",userName),
new SqlParameter("@Name",""),
new SqlParameter("@Hometown",""),
new SqlParameter("@PhoneNumber",""),
new SqlParameter("@EMail",""),
};
bool b = dh.ExcuteCommand(sqlStr, param);
return b;
}
业务逻辑层使用下面的方法进行事务处理,但当发生异常时无法回滚,即当第二个表添加失败时,第一个表仍成功:
public bool AddUserToTwoTable(string userName, string userPassword)
{
using (TransactionScope ts = new TransactionScope())
{
UserDAL ud = new UserDAL();
bool b1 = ud.AddUser(userName, userPassword);
bool b2 = ud.AddUserInfo(userName);
ts.Complete();
if (b1 && b2)
{
return true;
}
else
{
return false;
}
}
}
请问是为什么?谢谢!解决问题再追加100分!
我知道是分层开发产生的问题,如果这些代码写在同一个类中,事务处理是可以正常进行的,我现在就是想在分层开发的前提下,不适用存储过程,而使用.NET的事务处理解决问题,望高手指教,万分感谢。
1楼的仁兄:我的事物是在业务逻辑层的,没有用在访问层和应用层,也没有在应用层写新的方法,主要是考虑分层结构的严谨性,不想把SQL语句带到逻辑层和应用层,也不想在访问层执行事务这样的逻辑。
2楼的兄弟:在应用层写方法,意味着应用层将出现SQL语句,我不想这么做,应为严格上讲只有数据访问层可出现SQL语句。
展开
 我来答
百度网友94c4b7f
2011-01-09 · TA获得超过369个赞
知道小有建树答主
回答量:322
采纳率:0%
帮助的人:139万
展开全部
你在逻辑层用这个事物没有意义,你并没有告诉这两个方法你用了事物。为什么不能在数据层用事物重新写方法?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luyu20010926
2011-01-09
知道答主
回答量:27
采纳率:0%
帮助的人:14.9万
展开全部
因为三个数据访问层是一样的吧
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式