关于c#中ado.net的一些问题
1、除了sqlconnection对象,我知道用后一定要关闭之外,那么其他的如sqlcommand,sqlreader,dataset,dataadapter用后是否需要...
1、除了sqlconnection对象,我知道用后一定要关闭之外,那么其他的如sqlcommand,sqlreader,dataset,dataadapter用后是否需要关闭呢?
2、我在网上看视频讲解,几乎每实例化一个对象就using一下,using了很多层,有必要吗,就把sqlconnection这里using 一下不行吗?
3、还有我看杨中科老师的讲解,就是喜欢全部使用using方法来处理连接和释放的问题,请教using方法是否等价于try catch finall方法呢?如果数据库连接失败,using能抛出异常吗,一般使用哪种方法来处理这种需要使用后释放的比较好呢? 展开
2、我在网上看视频讲解,几乎每实例化一个对象就using一下,using了很多层,有必要吗,就把sqlconnection这里using 一下不行吗?
3、还有我看杨中科老师的讲解,就是喜欢全部使用using方法来处理连接和释放的问题,请教using方法是否等价于try catch finall方法呢?如果数据库连接失败,using能抛出异常吗,一般使用哪种方法来处理这种需要使用后释放的比较好呢? 展开
4个回答
展开全部
DataSet是一个数据容器,仅仅用来保存数据,不使用数据库连接,所以不需要关闭
DataAdapter一般作为数据填充器来使用,它需要使用到Connection对象,但是在它内部使用Connection时,如果为open状态,则使用后保存open状态,如果原来为close状态,则使用时open,使用完成后close,使connection对象在使用前与使用后保存相同状态,所以使用DataAdapter时一般不需要操心数据连接的事。
而SqlDataReader的Close或是Dispose方法内有释放资源方法,虽然垃圾回收机制会自动收回,但是建议显示释放一下。
SqlCommand的Dispose方法看了一下没做什么事,不释放应该没有什么问题。还是仍然建议使用完后释放一下,因为内部代码可能会有变化的。
是不是使用using有一个前提,不是所有的对象都能使用using。只有实现了IDisposable接口的对象才能使用using。IDisposable接口唯一的方法就是Dispose,该方法主要供对象释放非托管资源使用。
而using时就是try finally的简写。 finally中做的事就是调用对象有Dispose方法,然后如果有异常的话,继续抛出异常。
所以在可以使用using的时候就使用using吧,会方便一些。
DataAdapter一般作为数据填充器来使用,它需要使用到Connection对象,但是在它内部使用Connection时,如果为open状态,则使用后保存open状态,如果原来为close状态,则使用时open,使用完成后close,使connection对象在使用前与使用后保存相同状态,所以使用DataAdapter时一般不需要操心数据连接的事。
而SqlDataReader的Close或是Dispose方法内有释放资源方法,虽然垃圾回收机制会自动收回,但是建议显示释放一下。
SqlCommand的Dispose方法看了一下没做什么事,不释放应该没有什么问题。还是仍然建议使用完后释放一下,因为内部代码可能会有变化的。
是不是使用using有一个前提,不是所有的对象都能使用using。只有实现了IDisposable接口的对象才能使用using。IDisposable接口唯一的方法就是Dispose,该方法主要供对象释放非托管资源使用。
而using时就是try finally的简写。 finally中做的事就是调用对象有Dispose方法,然后如果有异常的话,继续抛出异常。
所以在可以使用using的时候就使用using吧,会方便一些。
展开全部
第一个问题 sqlcommand,sqldatareader也需要关闭,dataset和dataadapter不需要关闭。
第二个问题 不是每个对象实例化都要using 只用在同一个类中 using一次就可以了 在不同类 每次引用都要引用命名空间的。
第三个问题 using不是方法try catch finally 也不是方法
using是引用命名空间的
try catch finall 作异常处理的
try
{这个里面把容易出现异常的代码写在这里}
catch(Exception ex)//添加Exception ex 当出现异常时报异常情况
{
MessageBox.Show(ex.Message);
}
finall
{
里面写关闭方法 // 不论出现异常否都会关闭各种链接
}
第二个问题 不是每个对象实例化都要using 只用在同一个类中 using一次就可以了 在不同类 每次引用都要引用命名空间的。
第三个问题 using不是方法try catch finally 也不是方法
using是引用命名空间的
try catch finall 作异常处理的
try
{这个里面把容易出现异常的代码写在这里}
catch(Exception ex)//添加Exception ex 当出现异常时报异常情况
{
MessageBox.Show(ex.Message);
}
finall
{
里面写关闭方法 // 不论出现异常否都会关闭各种链接
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
using()
{
}
这样写不用关闭,系统会自动释放
sqlconnection con=new sqlconnection("");
这样就要主动去释放
{
}
这样写不用关闭,系统会自动释放
sqlconnection con=new sqlconnection("");
这样就要主动去释放
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上正确的,不过一般数据库取数据都不关的吧,反正我是没关过
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询