关于事务,我这么写对不对.

blackhero 2006-10-30 09:36:22
public static bool ExcuteNonQueryTrans(string[] sqls, params SqlParameter[][] pas)
{
bool success=true;
string strConn=System.Configuration.ConfigurationSettings.AppSettings["connstr"].ToString();
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd =cn.CreateCommand();
SqlTransaction ta=cn.BeginTransaction();
cmd.Transaction=ta;
try
{
for(int i=0;i<sqls.Length;i++)
{
cmd.CommandText = sqls[i];
cmd.CommandType =System.Data.CommandType.StoredProcedure;
cmd.Parameters.Clear();
foreach(SqlParameter pa in pas[i])
{
cmd.Parameters.Add(pa);
}
cmd.ExecuteNonQuery();
}
ta.Commit();
}
catch
{
ta.Rollback();
success= false;
}
finally
{
cn.Close();
}
return success;
}
...全文
216 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
baffling 2007-01-29
  • 打赏
  • 举报
回复
gz
鼻涕蛋蛋 2007-01-24
  • 打赏
  • 举报
回复
mark 楼上说的,我貌似就遇见过。。
Ivony 2006-10-30
  • 打赏
  • 举报
回复
ta.Commit();

如果你这里失败呢?

还有,变量名用transaction,ta是什么?他?


如果你Commit失败,那么触发异常,被catch到,再执行ta.RollBack,肯定又是失败,这样异常就跑出去了,你没有屏蔽异常反而还篡改了异常信息。

也不应该屏蔽异常,
建议把Commit放到try外面去,connection用using包住,catch里面加个throw;
非要屏蔽异常的话,把RollBack加个try
cancerser 2006-10-30
  • 打赏
  • 举报
回复
遇到什么问题了吗?
gui0605 2006-10-30
  • 打赏
  • 举报
回复
好象是对的啊~
copico 2006-10-30
  • 打赏
  • 举报
回复
可以,我到是觉得你可以把SQL放在一个连成一个字符串,传给一个存储过程。然后在里面分解

再执行

这样的效率和安全率都相对比页面的高,因为必毕是在数据库里操作
blackhero 2006-10-30
  • 打赏
  • 举报
回复
我往七个表里插数据
xhmbldsh 2006-10-30
  • 打赏
  • 举报
回复
根本没必要写事物
blackhero 2006-10-30
  • 打赏
  • 举报
回复
sqls,是存储过程,第个存储过程,都有参数pas
jijl2001 2006-10-30
  • 打赏
  • 举报
回复
可以的

62,243

社区成员

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

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

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

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