---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------
在ado.net编程中为了更好的利用内存资源,我们要及时的释放那些不用的资源和内存空间;
微软提倡我们尽可能每次的在连接使用完成以后就关闭,这样每次在每次使用完成以后都要加上con.Close()和con.Dispose();至于Close()和Dispose()的区别呢,下面我来简述一下:
Close()的作用是关闭当前数据库连接,但是关闭了以后还能通过Open()来重新打开连接,就像自来水管中的水龙头的作用一样;
Dispose()的作用和Close()一样虽然都是关闭连接,但是Dispose()关闭的更彻底,它是将资源释放,就像上面例子一样,它是将自来水管以及水龙头一并撤走了,不存在了;
当然在调用Dispose()的时候它会自动检查连接有没有Close(),没有关闭的话就先关闭然后再释放资源,清空内存中不在使用的空间;
这样就有一个弊端,当我们在使用完连接以后我们忘掉Close和Dispose的时候怎么办?这样难免会造成资源的浪费,造成空间的堵塞;虽然C#中有垃圾回收机制,但是到底什么时候回收,我们就不知道了;所以每次使用完连接后给它Close和dispose难免会造成麻烦,所以我们就要去考虑using的使用了,使用using后,我们不必每次都去加上close和dispose这些代码,使用using后,在每次连接使用完成后,它会自动的去调用Dispose()方法,这样就杜绝了资源的浪费。下面是一小段使用using的代码块,它的好处不言而喻了:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入用户名:");
string username = Console.ReadLine();
Console.WriteLine("请输入密码:");
string password = Console.ReadLine();
using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\My Documents\Visual Studio 2008\Projects\ado.net连接数据库\ado.net连接数据库\Database1.mdf;Integrated Security=True;User Instance=True"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
//cmd.CommandText = "select count(*) from T_Users where UserName='" + username + "' and Password='" + password + "'";
cmd.CommandText = "select count(*) from T_Users where UserName=@UID and Password=@PWD";
cmd.Parameters.Add(new SqlParameter("UID",username));
cmd.Parameters.Add(new SqlParameter("PWD",password));
//防SQL注入漏洞
int i = Convert.ToInt32( cmd.ExecuteScalar());
if (i > 0)
{
Console.WriteLine("登陆成功!");
}
else
{
Console.WriteLine("用户名或密码错误!");
}
}
}
Console.ReadKey();
}
}
---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/