黑马程序员技术交流社区
标题:
关闭连接连接为什么要在这里关闭??求解答
[打印本页]
作者:
赵威
时间:
2013-4-29 16:31
标题:
关闭连接连接为什么要在这里关闭??求解答
//获取输入的字符串和密码
string strName = txtUserName.Text.Trim();
string strPwd = txtPassword.Text.Trim();
//定义连接字符串
string connString="data source=127.0.0.1;initial catalog=itcast;integrated security=true";
//定义连接变量conn
using (SqlConnection conn = new SqlConnection(connString))
{
//定义Sql语句
string sql = string.Format ("select userpwd from tblUser where username='{0}'",strName );
//定义操作变量cmd,并调用函数传入Sql语句和连接conn
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
//打开连接
conn.Open();
//调用ExecuteScalar()方法,来返回一个单元格的值得(相当于根据键来找相对应的值)
string newStr=cmd.ExecuteScalar().ToString ();
//关闭连接
conn.Close();
//这里需要遵循最晚连接,最早关闭,但为什么要在这里关闭,求高手解答????
//判断登录情况
if (strPwd == null)
{
MessageBox.Show("用户名不存在");
}
if (newStr == strPwd)
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("用户名或密码错误");
}
}
}
连接和关闭要遵循最晚连接和最早关闭,但为什么要在此处关闭?求高手解答??
作者:
陈晖
时间:
2013-4-29 16:38
因为关闭上面的语句:string newStr=...
已经获得查询的结果,当然是这里最早关闭了。
不过你既然有了ustin语句块,那么就会自动释放资源。:)
作者:
清朗的晨风
时间:
2013-4-30 10:51
数据库连接,如果可以,最早关闭,数据的连接能力有限,使用完就立即关闭释放资源,不然以后做网站,服务器的数据库会卡死的。。。
我们老师说,数据库连接尽可能早的关闭,使用完后立即关闭,不是最晚关闭。
作者:
闫常国
时间:
2013-4-30 22:04
既然你的SQL语句已经执行完成,就没有继续连接着数据库的必要了,在这里关闭可以尽早的释放资源。不过既然你已经使用了Using,这里不关闭,他也会到执行完Using语句块时自动释放资源的。
作者:
张伟86
时间:
2013-5-1 02:00
楼主的意思可能是在问
conn.Close();
为何要放到那里?是不是一定要放到那个位置吧?
1、首先,这段代码调用数据库中的代码语句的只有一句
string newStr=cmd.ExecuteScalar().ToString ();
,其他代码段没有语句再对数据库进行读取操作,那么在此句之后就可以关闭数据库连接了。代码作者对内存很珍惜,也遵循原则,就在这句之后执行了数据库关闭操作。
2、这段代码也可以置于其他位置,比如if代码块中,比如else块中,但是就需要每个代码块都加上这么一句,类似于
if (strPwd == null)
{
MessageBox.Show("用户名不存在");
conn.Close();
}
if (newStr == strPwd)
{
MessageBox.Show("登陆成功");
conn.Close();
}
else
{
MessageBox.Show("用户名或密码错误");
conn.Close();
}
复制代码
逻辑性不强,也较繁琐。
除此之外最好的位置在else之后的语句
if (strPwd == null)
{
MessageBox.Show("用户名不存在");
}
if (newStr == strPwd)
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("用户名或密码错误");
}
conn.Close();
复制代码
条理也清楚,估计楼主也想到这个了。{:soso_e100:}
3、就是大家说的using块自动释放问题,就是不加close语句,也会在using块生命期结束时释放的。
总的来说,程序员自动释放内存是一种很好的习惯。比起C++语法来说,C#安全性在这里很有体现。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2