函数里的变量的生命周期是什么

yongfa365 2009-02-22 05:52:13

protected void btnSave_Click(object sender, EventArgs e)
{
SqlParameter[] parms ={
new SqlParameter("@xingming", txtxingming.Text.Trim()), //客户姓名
new SqlParameter("@tel", txttel.Text.Trim()), //电话
new SqlParameter("@address", txtaddress.Text.Trim()), //地址
new SqlParameter()
};

if (txtIDEdit.Value == string.Empty)
{
SqlHelper.ExecuteNonQuery(SqlHelper.SqlConnection, CommandType.StoredProcedure, "yongfa365_ZhuaiZhiInsert", parms);
JS.AlertTo("添加成功", "/ZhuaiZhi/ZhuaiZhi.aspx");
}
else
{
parms[parms.Length - 1] = new SqlParameter("@Id", txtIDEdit.Value.Trim());
SqlHelper.ExecuteNonQuery(SqlHelper.SqlConnection, CommandType.StoredProcedure, "yongfa365_ZhuaiZhiUpdate", parms);
Response.Redirect(Request["txtFromUrl"]);
}
}


protected void btnSave2_Click(object sender, EventArgs e)
{
using (SqlConnection ConnNow = new SqlConnection(SqlHelper.SqlConnection))
{
SqlParameter[] parms ={
new SqlParameter("@xingming", txtxingming.Text.Trim()), //客户姓名
new SqlParameter("@tel", txttel.Text.Trim()), //电话
new SqlParameter("@address", txtaddress.Text.Trim()), //地址
new SqlParameter()
};

if (txtIDEdit.Value == string.Empty)
{
SqlHelper.ExecuteNonQuery(ConnNow, CommandType.StoredProcedure, "yongfa365_ZhuaiZhiInsert", parms);
JS.AlertTo("添加成功", "/ZhuaiZhi/ZhuaiZhi.aspx");
}
else
{
parms[parms.Length - 1] = new SqlParameter("@Id", txtIDEdit.Value.Trim());
SqlHelper.ExecuteNonQuery(ConnNow, CommandType.StoredProcedure, "yongfa365_ZhuaiZhiUpdate", parms);
Response.Redirect(Request["txtFromUrl"]);
}
}
}



===========================================================
问题1:btnSave_Click好呢,还是btnSave2_Click好,为什么?
问题1:这两个函数里的变量的生命周期是什么,是不是执行完后就自动没了?
...全文
591 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongfa365 2009-02-23
  • 打赏
  • 举报
回复
呵呵,这样呀,放心 了。
北京的雾霾天 2009-02-23
  • 打赏
  • 举报
回复
这可能需要看你使用的是什么数据库,比如是Access数据库,可以使用一个全局的打开的连接,在程序结束的时候Close就可以了。而使用Sqlserver等则最好使用的时候Open,用完后立刻Close。所以这时使用Using是合适的。因为Access是单用户的,打开关闭多了反而影响效率,而SqlServer是多用户的,打开了不释放就会占用很多资源。
huxuanhui 2009-02-23
  • 打赏
  • 举报
回复
路过 学习
  • 打赏
  • 举报
回复
两种方法差不多,只是第二种会立即是释放资源,第一种会等待垃圾回收器回收。
  • 打赏
  • 举报
回复
ExecuteDataset
会自动调用连接的open 和close,所以不用去主动关闭

好像除了使用datareader,都会自动去开和关闭,而事实上,sqlconnection的close和open并不是真正意义上的去打开和关闭数据库连接,它只是在连接池里没有连接了的情况下去开一下数据库连接,而后的close只是把这个连接放回了连接池而已。
yongfa365 2009-02-23
  • 打赏
  • 举报
回复
SqlHelper.ExecuteNonQuery();
直接这么用就行,他会自动释放资源?


还有,如果我要取数据时:

GridView1.DataSource = SqlHelper.ExecuteDataset(SqlHelper.SqlConnection, CommandType.Text, sql).Tables[0];
GridView1.DataBind();

这里是不是也不用考虑关闭conn的问题
泡面之夏 2009-02-22
  • 打赏
  • 举报
回复
using{}语句块,执行完自动释放
wuyq11 2009-02-22
  • 打赏
  • 举报
回复
第一种要显示释放资源
using 清理非托管资源,不受GC控制的资源。Using结束后会隐式的调用Disposable方法。
局部变量只在函数内使用
king19840811 2009-02-22
  • 打赏
  • 举报
回复
SqlHelper.ExecuteNonQuery里面有开关连接的代码??
没用sqlHelper....

一般都用下面的方式using 语句是执行完了就会释放

62,074

社区成员

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

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

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

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