ASP.NET关于事物处理

shnaying1945 2012-03-27 05:20:10
1.数据库读访问的时候,有没有必要用事务处理呢?当访问出错的时候,界面会怎么样?(我知道写访问出错的时候界面会跳转到一个很糟糕的界面,但我希望在出错的时候能停留在原界面,只是操作取消了而已)
2.在同一个方法里面,我同时使用了三个事务处理块,但使用的是同一个 transql:
SqlTransaction transql = null;
结果出错了,我是必须定义三个不同的transql,还是有其他方法呢?
3.我是为了能尽快释放对数据库的占用我才频繁地使用事务处理,在几个事务处理之间我就执行了十行左右的代码,我不知道应该合并这些事务处理还是分开的好。
...全文
171 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiume 2012-03-28
  • 打赏
  • 举报
回复

private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();

SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;

// Start a local transaction.
transaction = connection.BeginTransaction("SampleTransaction");

// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;

try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();

// Attempt to commit the transaction.
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message);

// Attempt to roll back the transaction.
try
{
transaction.Rollback();
}
catch (Exception ex2)
{
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}
}
wcj1018_net 2012-03-28
  • 打赏
  • 举报
回复
多表操作要用事务,保持一致性
夜色镇歌 2012-03-28
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
[Quote=引用楼主 shnaying1945 的回复:]
2.在同一个方法里面,我同时使用了三个事务处理块,但使用的是同一个 transql:
SqlTransaction transql = null;
结果出错了,我是必须定义三个不同的transql,还是有其他方法呢?
3.我是为了能尽快释放对数据库的占用我才频繁地使用事务处理,在几个事务处理之间我就执行了十行左右的代码,我不知道应该合并这些事务处理还是分开的好。
[/Quote]

设置了null你继续使用,当然会出错。

假设你的意思就是三个事务,当然要new三个trans实例。

“为了能尽快释放对数据库的占用我才频繁地使用事务处理”这个看不懂。缩小事务是对的!但是最小的事务就是根本没有显示的trans,(假设你使用sql server那么)这样sql server就会自动为每一条Sql语句都创建一个trans。如果你觉得还可以更小范围,尽管继续拆吧。

不过设置一个事务的目的是保证数据一致性,要么一致提交要么一致回滚,并且此事务中涉及到的记录不会被其它事务操作读取而造成幻像读或者脏读等异常逻辑。你使用事务之前,应该有这方面的考虑才会用它。
  • 打赏
  • 举报
回复
什么叫“停留在原界面”?给一个“空的”概念容易,但是你必须给出跟其它描述一样实实在在的界面效果设计出来,才好真正看出有什么编程方法。
ycproc 2012-03-28
  • 打赏
  • 举报
回复
事务处理 分在什么情况下事情 主要根据业务来变通


using (TransactionScope scope = new TransactionScope())
{ //创建事物对象
try
{
//执行事务操作的相关代码


scope.Complete(); //提交事物
}
catch (Exception ex) { throw ex; } //抛出异常
finally { scope.Dispose(); } //回滚事物
}
Ahoo 2012-03-27
  • 打赏
  • 举报
回复
try{}
catch{}
  • 打赏
  • 举报
回复
1就是在catch里处理咯!

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧