页面上做了个按钮,触发获取数据,插入数据,更新等比较多的数据库操作事件,由于数据牵动到多个表,所以用了事务,第一回用事务,不太懂。
症状如下,事件触发后,数据库变慢了,尝试从sql查询窗口上delete或者select(反正是所有查询操作)数据时,执行查询变得非常慢。从查询窗口删除清空主表数据后,隔一段时间查询发现主表上数据在慢慢增多,这说明是刚才的操作还在继续,刷新网页也发觉原来没有数据的页面,数据也慢慢增多不太明白,为什么这么怪?下面是代码判断与操作主要流程: for ()//第一层循环,得到数据
{
if ()//判断一下数据是否需要处理
{
foreach ()//第二层循环数据,进行处理
{
if ()//某条件
{
try
{
if ()//某条件
{
}
if ()//如果不进入这个条件,程序执行的还是很快的
{
using (DbConnection connection = DatabaseFactory.CreateDatabase().CreateConnection())
{
connection.Open();//这里打开,用了using,后面还需要close吗?
DbTransaction dbTran = connection.BeginTransaction();//事务开始
try
{
if ()//更新某数据表,如果更新不成功,回滚
{
dbTran.Rollback();
continue;//因为失败了,用continue跳出这个循环,继续下次循环,对吗?
}
if ()//获得某数据表后的判断
{
if ()//插入数据到某表//如果更新不成功,回滚
{
dbTran.Rollback();
continue;
}
}
if ()//获得某数据表后的判断
{
if ()//插入数据到某表//如果更新不成功,回滚
{
dbTran.Rollback();
continue;
}
}
dbTran.Commit();//正常,提交事务
}
catch//异常,回滚
{
dbTran.Rollback();
}
}
}
else
{
}
}
catch (Exception ex)//捕获异常
{
}
}
}
}
}不知道是不是这个执行流程的层嵌的太深了?我没有更好的办法,因为确实流程需要这样。。也不知道我的事务是否用对了?上面也说了不进入那个事务流程,执行会很快
有可能是什么原因造成的?请各位指点下,谢谢了
症状如下,事件触发后,数据库变慢了,尝试从sql查询窗口上delete或者select(反正是所有查询操作)数据时,执行查询变得非常慢。从查询窗口删除清空主表数据后,隔一段时间查询发现主表上数据在慢慢增多,这说明是刚才的操作还在继续,刷新网页也发觉原来没有数据的页面,数据也慢慢增多不太明白,为什么这么怪?下面是代码判断与操作主要流程: for ()//第一层循环,得到数据
{
if ()//判断一下数据是否需要处理
{
foreach ()//第二层循环数据,进行处理
{
if ()//某条件
{
try
{
if ()//某条件
{
}
if ()//如果不进入这个条件,程序执行的还是很快的
{
using (DbConnection connection = DatabaseFactory.CreateDatabase().CreateConnection())
{
connection.Open();//这里打开,用了using,后面还需要close吗?
DbTransaction dbTran = connection.BeginTransaction();//事务开始
try
{
if ()//更新某数据表,如果更新不成功,回滚
{
dbTran.Rollback();
continue;//因为失败了,用continue跳出这个循环,继续下次循环,对吗?
}
if ()//获得某数据表后的判断
{
if ()//插入数据到某表//如果更新不成功,回滚
{
dbTran.Rollback();
continue;
}
}
if ()//获得某数据表后的判断
{
if ()//插入数据到某表//如果更新不成功,回滚
{
dbTran.Rollback();
continue;
}
}
dbTran.Commit();//正常,提交事务
}
catch//异常,回滚
{
dbTran.Rollback();
}
}
}
else
{
}
}
catch (Exception ex)//捕获异常
{
}
}
}
}
}不知道是不是这个执行流程的层嵌的太深了?我没有更好的办法,因为确实流程需要这样。。也不知道我的事务是否用对了?上面也说了不进入那个事务流程,执行会很快
有可能是什么原因造成的?请各位指点下,谢谢了
解决方案 »
- Datalist中DataBinder.Eval功能 控制 ,大神来看看 急!
- windows service监听端口
- 树行控件TreeView 在WinForm下 怎么实现重命名功能
- reportViewer1 打印时 显示句柄无效 是什么原因造成的?谁遇到过这种问题?
- build文件是什么?
- 我想每天下午五点定时从数据库中抓出一些数据生成一份excel文件,大家有没有好的解决方法,谢谢!
- 求点击文本框弹出层,点击层内容后加到文本框内的代码!
- 问个数据库三大范式问题
- 请教:在DataGrid中直接修改、删除数据后,如果点击IE的刷新按钮,修改、删除动作会做两次,为什么?如何解决?
- vb6调用c#控件问题
- DataGridView的一些问题,求大大
- ACCESS数据库中支持这样的语法吗?
{
if ()//判断一下数据是否需要处理
{
foreach ()//第二层循环数据,进行处理
{
if ()//某条件
{
try
{
if ()//某条件
{
}
if ()<span style="color: #FF0000;">//如果不进入这个条件,程序执行的还是很快的</span>
{
using (DbConnection connection = DatabaseFactory.CreateDatabase().CreateConnection())
{
connection.Open();<span style="color: #FF0000;">//这里打开,用了using,后面还需要close吗?</span>
DbTransaction dbTran = connection.BeginTransaction();//事务开始
try
{
if ()//更新某数据表,如果更新不成功,回滚
{
dbTran.Rollback();
continue;<span style="color: #FF0000;">//因为失败了,用continue跳出这个循环,继续下次循环,对吗?</span>
}
if ()//获得某数据表后的判断
{
if ()//插入数据到某表//如果更新不成功,回滚
{
dbTran.Rollback();
continue;
}
}
if ()//获得某数据表后的判断
{
if ()//插入数据到某表//如果更新不成功,回滚
{
dbTran.Rollback();
continue;
}
}
dbTran.Commit();//正常,提交事务
}
catch//异常,回滚
{
dbTran.Rollback();
}
}
}
else
{
}
}
catch (Exception ex)//捕获异常
{
}
}
}
}
}
1.业务逻辑放一个层里面
2.业务处理放一个层里面
3.数据操作放一个层里面你这样看着乱,并且在数据操作和业务都放在一个里面,这样不怎么好。
try catch 只放在真正的数据库操作里面就可以了。
因为我的处理是要看数据处理成什么样才能根据情况操作下一步,所以恐怕还是得有这么多判断,只是如果分一些层可能看着简单些(实际一样是引用函数而已,而且这些东西只在这个地方用,所以我想没必要将它放入层里面)
try catch的用处是,因为数据比较多,有时候可能还是空的或者null的数据,可能会导致程序出错中止,所以我不想出现这样的错误界面,就try一下,直接跳过不知道我的想法对不对。