急,用靜態方法寫的數據訪問層,在程序中使用不少事務,特別是在import時,使用事務啦。大約兩小時,就會出現事務未提交的錯誤, 如題。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 現在的數據訪問層,我個人認為,有一些問題,事務放在bll層,事務起始也是放在bll層中間執行一堆代碼。如果不拋異常就commit,否則就rollback。dal層調用數據訪問層,是傳param進去,沒有傳鏈接字符串進去,目的,想很多操作工用一個鏈接。呵呵,就出現很多這些事務未提交的問題。 qiule :静态方法不适宜被多次调用?那写静态方法的目的是什么你明白么?某个方法就是因为会经常使用,为了避免创建对象所耗费的资源才写成静态的....... Dal不是靜態的,只有數據訪問層用靜態的。bll也不是靜態訪問方法。上面很多朋友說,靜態方法慎用,能否舉一實例呢靜態方法里面有事務,我們有一些問題。不同的iis鏈接進去,怎么會公用一個鏈接呢,“事務未提交,”我們一定所有的地方都寫commit啦 happy happy 欢迎大伙来C# / .Net 7729746 交流社团 聊技术,项目合作。Blogs http://zhoufleru.cnblogs.com public void Insert(List<ImpBWDetailInfo> obj) { //增加要調用Order業務層相應方法 SqlHelper.OpenTrans(); try { #region 給SetOrder部分賦值 SetOrder.Instance.Edit((SetOrderInfo)obj[0]); #endregion #region 給SetOrder State if (obj[0].impOrderState == ImportOrderState.ReDateOrder) { SetOrderStateInfo modState = new SetOrderStateInfo(); SetOrderState.Instance.Insert(modState); } #endregion #region 給SetOrder Today SetOrderTodayInfo todayObj = new SetOrderTodayInfo(obj[0].OrderNo, obj[0].ServType, obj[0].CommitDate, createBy); SetOrderToday.Instance.Edit(todayObj); #endregion //BW存在一對多情況,因此,setorder只需要一條記錄 for (int i = 0; i < obj.Count; i++) { if (i == 0) dal.Edit(obj[0]); else dal.EditNotOne(obj[i]); } //dal.Edit(obj[0]); for (int i = 0; i < obj.Count; i++) { succeedImp.Add(obj[i]); } } catch { //回滾事務 SqlHelper.RollbackTrans(); for (int i = 0; i < obj.Count; i++) { errImp.Add(obj[i]); } //continue; } //提交事務 SqlHelper.CommitTrans(); } 上面是bll層的代碼。dal層,類似 public void Insert(SetOrderStateInfo cSetOrderStateInfo) { SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, CommandType.Text, CSetOrderState_INSERT_SQL, GetInsertCSetOrderStateParameters(cSetOrderStateInfo)); } 求一个FLASH切换广告源码 ★★★★★C#……正则表达式★★★★★ 怎么获取IE语言设置信息 正则表达式拆分时间字符串问题!!急解!!! 关于修改数据库问题 请教关于前台页面的制作问题! 扇贝武器娃地干活地进来 如何获取repeater中动态添加的控件的值 招聘 textbox最大长度设置问题 DropDownList出错:提示不能选择多项问题 如何读取datagrid控件中当前行的自动编号值
事務放在bll層,
事務起始也是放在bll層
中間執行一堆代碼。
如果不拋異常就commit,否則就rollback。dal層調用數據訪問層,是傳param進去,沒有傳鏈接字符串進去,目的,想很多操作工用一個鏈接
。呵呵,就出現很多這些事務未提交的問題。
某个方法就是因为会经常使用,为了避免创建对象所耗费的资源
才写成静态的
.......
bll也不是靜態訪問方法。
上面很多朋友說,靜態方法慎用,能否舉一實例呢
靜態方法里面有事務,我們有一些問題。
不同的iis鏈接進去,怎么會公用一個鏈接呢,
“事務未提交,”我們一定所有的地方都寫commit啦
{
//增加要調用Order業務層相應方法 SqlHelper.OpenTrans();
try
{
#region 給SetOrder部分賦值
SetOrder.Instance.Edit((SetOrderInfo)obj[0]);
#endregion
#region 給SetOrder State
if (obj[0].impOrderState == ImportOrderState.ReDateOrder)
{
SetOrderStateInfo modState = new SetOrderStateInfo();
SetOrderState.Instance.Insert(modState);
}
#endregion
#region 給SetOrder Today SetOrderTodayInfo todayObj = new SetOrderTodayInfo(obj[0].OrderNo, obj[0].ServType, obj[0].CommitDate, createBy);
SetOrderToday.Instance.Edit(todayObj); #endregion //BW存在一對多情況,因此,setorder只需要一條記錄
for (int i = 0; i < obj.Count; i++)
{
if (i == 0)
dal.Edit(obj[0]);
else
dal.EditNotOne(obj[i]);
}
//dal.Edit(obj[0]);
for (int i = 0; i < obj.Count; i++)
{
succeedImp.Add(obj[i]);
}
}
catch
{
//回滾事務
SqlHelper.RollbackTrans();
for (int i = 0; i < obj.Count; i++)
{
errImp.Add(obj[i]);
}
//continue;
}
//提交事務
SqlHelper.CommitTrans();
}
dal層,類似
public void Insert(SetOrderStateInfo cSetOrderStateInfo)
{
SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionString, CommandType.Text, CSetOrderState_INSERT_SQL, GetInsertCSetOrderStateParameters(cSetOrderStateInfo));
}