我再数据访问层写了两个类
class x
{
operatex(数据库的连接,操作,关闭)
}
class y
{
operatey(数据库的连接,操作,关闭)
}
我怎么在页面层同时调用x.operatex()和y.operatey()
我想让他们两个都成功才成功,任何一个失败就算失败,即怎样用事务?
(不要给我说在页面层再次用到数据库连接,通过连接对象的事务来控制,这样岂不是连接次数太多了,另外我不想在页面层使用数据库连接)
class x
{
operatex(数据库的连接,操作,关闭)
}
class y
{
operatey(数据库的连接,操作,关闭)
}
我怎么在页面层同时调用x.operatex()和y.operatey()
我想让他们两个都成功才成功,任何一个失败就算失败,即怎样用事务?
(不要给我说在页面层再次用到数据库连接,通过连接对象的事务来控制,这样岂不是连接次数太多了,另外我不想在页面层使用数据库连接)
你可以在构造函数里面重载一个把conn传进来,只要是一个conn那么就一个封在一个事务操作里面..
请你说的详细一点
{
operatey(数据库的连接,操作,关闭)
y(){}
y(x _x){}//重载构造函数,在这里的connection用x的connection对象。
}
我是说在aspx里怎样调用事务,因为原则上aspx页面里不提倡将数据库连接写到这里的,
没有数据库连接对象,你怎么操作事务?
你可以用Nhiberate或者http://www.cnblogs.com/luoqing这里面有个框架。里面的数据访问部分的事务处理非常的Exellence.
比如:
class x
{
operatex(数据库的连接,操作,关闭)
}
class y
{
operatey(数据库的连接,操作,关闭)
}
在同时调用operatex,operatey时,它会把事务串联起来。形成一个事务
大概如下
public abstract class BaseDAO
{
public BaseDAO()
{
_conn = new SqlConnection( AppConfig.DbConnectionString );
_conn.Open();
} public BaseDAO( BaseDAO db )
{
_conn = (SqlConnection)db.GetConnection();
_trans = (SqlTransaction)db.GetTransaction();
}
protected IDbConnection GetConnection()
{
return _conn ;
}
public IDbTransaction GetTransaction()
{
return _trans ;
}}
//代码不是很完整,大概是这样的一个思路
using Microsoft.Practices.EnterpriseLibrary.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
使用这三个DLL,用不用每次数据库操作都关闭conncection
如下面:
public static DataTable Get(long _intSystemRoleID)
{
Database db=DatabaseFactory.CreateDatabase("DatabaseInstance0");
string StrCmd="up_SystemRole";
DBCommandWrapper cw=db.GetStoredProcCommandWrapper(StrCmd);
cw.AddInParameter("@SystemRoleID",DbType.Int64,_intSystemRoleID);
return (DataTable)(db.ExecuteDataSet(cw)).Tables[0];
}
还是这样调用:
public static DataTable Get(long _intSystemRoleID)
{
Database db=DatabaseFactory.CreateDatabase("DatabaseInstance0");
db.GetConnection().Open();
string StrCmd="up_SystemRole";
DBCommandWrapper cw=db.GetStoredProcCommandWrapper(StrCmd);
cw.AddInParameter("@SystemRoleID",DbType.Int64,_intSystemRoleID);
DataTable dt=(DataTable)(db.ExecuteDataSet(cw)).Tables[0];
db.GetConnection().Close();
return dt;
}另外如果如果采用类的继承的方法,连接数据库的操作是会少写很多,但是关闭连接不好控制,具体怎么控制呢
try
{
你的操作
Trans.Commit();
}
catch
{
Trans.Rollback();
}
你能保证每次数据库操作都是采用同一个connection吗,
因为你的你new操作了,不能保证同一个connection怎么能在一个事务里操作