一个关于Sqlcommand执行事物与连接池的问题

下面是我师兄以前给我的代码,我不明白为什么要把后面的方法封装,这不是重复啰嗦了么?在第一个方法的for循环中的sql语句不能用同一个命令执行么?这是不是考虑到连接池的问题... 下面是我师兄以前给我的代码,我不明白为什么要把后面的方法封装,这不是重复啰嗦了么?在第一个方法的for循环中的sql语句不能用同一个命令执行么?这是不是考虑到连接池的问题?反正我觉得写得不简洁,求高手改进。

/// <summary>
/// 用事务执行sql语句(多表操作)
/// </summary>
/// <param name="lisql">Sql命令的集合</param>
/// <returns>bool</returns>
public static bool UpdateDatamany(List<string> lisql)
{
SqlConnection conn = openConnection();
SqlCommand sqlcmd = new SqlCommand();
sqlcmd.Connection = conn;//连接对象
sqlcmd.CommandType = CommandType.Text;//命令类型
SqlTransaction sqltran = null;
try
{
conn.Open();//先打开连接才能开启事务
}
catch (Exception e)
{
throw e;
}
try
{
sqltran = conn.BeginTransaction();
sqlcmd.Transaction = sqltran;
for (int i = 0; i < lisql.Count; i++)
{
string sql = Convert.ToString(lisql[i]);
sqlcmd.CommandText = sql;//命令语句
DBHelper.UpdateDataDatamany(sql, sqltran);//执行
}
sqltran.Commit();//提交事务
return true;
}
catch (Exception)
{
sqltran.Rollback();//回滚事务
return false;
}
finally
{
conn.Close();
}
}

private static bool UpdateDataDatamany(string sql, SqlTransaction sqltran)
{
SqlCommand sqlcmd = new SqlCommand(sql, sqltran.Connection);
sqlcmd.Transaction = sqltran;
try
{
int rs = sqlcmd.ExecuteNonQuery();
return rs > 0;
}
catch (Exception e)
{
throw e;
}
}
展开
 我来答
不想起名字了2333
2011-11-29 · TA获得超过2447个赞
知道大有可为答主
回答量:1931
采纳率:50%
帮助的人:1861万
展开全部
感觉你的代码里面有好多多语的~~~~~
使用using(………………) {} 可以在using结束之后,系统自动关闭对象,清理占用的资源, 例如 using (SqlCommand cmd = new SqlCommand(sql,sqltran.Connection)){……}
使用完后,不需要使用 cmd.Dispose(); 来释放资源,using语句自动帮我们释放;
而且,即使发生错误,using还会使用try{} catch{} finally{} 的形式抛出异常~~~~~~

/// <summary>
/// 用事务执行sql语句(多表操作)
/// </summary>
/// <param name="lisql">Sql命令的集合</param>
/// <returns>bool</returns>
public static bool UpdateDatamany(List<string> lisql)
{
using (SqlConnection conn = openConnection())
{
conn.Open();
using (SqlCommand sqlcmd = new SqlCommand())
{
sqlcmd.Connection = conn;
sqlcmd.CommandType = CommandType.Text;
using (SqlTransaction sqltran = conn.BeginTransaction())
{
sqlcmd.Transaction = sqltran;
for (int i = 0; i < lisql.Count; i++)
{
DBHelper.UpdateDataDatamany(lisql[i].ToString(), sqltran);//依次执行sql语句
//这里把多条sql语句的执行 封装成一个方法,一是减少代码,而是可以查看事务中的某条sql语句是否正确执行,明显在一个方法的语句方便 调试~~~~~~
}

sqltran.Commit();//提交事务
return true;
}
}
}
}

private static bool UpdateDataDatamany(string sql, SqlTransaction sqltran)
{
using (SqlCommand cmd = new SqlCommand(sql,sqltran.Connection))
{
cmd.Transaction = sqltran;
return cmd.ExecuteNonQuery() > 0;
}
}

}
latentguling
2011-11-30 · TA获得超过326个赞
知道小有建树答主
回答量:636
采纳率:0%
帮助的人:530万
展开全部
你做好阶段性调整的心理准备就可以了。
不同阶段的人,写的代码不一样,这样的代码最初我在学做事务的时候也写过类似的,
到后面封装到只写主体,不过问事务代码,到后面更精简。
你也不用问我精简到什么程度,时间一长,你也会做到的。
就好像一开始学编程,很多人变量命名随意,后来看到满屏的代码,自己都头晕的时候,又开始去对齐,开始取点有意义的名字。
不过一开始就算有人告诉你要对齐,要命好名,你也不会注意的,人总是有一种不见棺材不掉泪的想法,到最好还是要死心的。经验是别人的,只能告诉你,无法融于你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式