那么我们在结束时下面的顺序是怎样的?请说明理由....
conn.close();
conn.close();
comm.Dispose();
tran.Dispose();
48 个解决方案
#1
沙发~
#2
conn关闭连接方在最后把。。。
#3
先清理再关。
#4
正常的顺序是
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
不过你要是反着来也行,
1.Command.Dispose(),若Command上有未提交的事务,则自动Rollback.
2.Connection.Close().不会调用Command.Dispose(),但事务会Rollback.
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
不过你要是反着来也行,
1.Command.Dispose(),若Command上有未提交的事务,则自动Rollback.
2.Connection.Close().不会调用Command.Dispose(),但事务会Rollback.
#5
tran.Dispose();
comm.Dispose();
conn.close();
本人觉得应该是这样,不知道原因,但知道嵌套。
#6
tran.Dispose();
comm.Dispose();
conn.close();
comm.Dispose();
conn.close();
#7
Q:我上面的代码中如果没有异常抛出的话,我可以使用close()或dispose()吗
A:我们毫无顾忌地用他们中的任意一个,或两个同时使用.在一个已经close或dipose()的连接中使用close()或dispose()是不会影响的
Q:Close()和Dispose()有什么不同,我应该用哪一个好?
A:它们做的是同一件事,你可以调用他们中的任意一个,或两个同时使用.
Q:你所说的"practically the same thing”是什么意思?
A:Dispose()将会通过sqlConnection来清理相关的连接,之后执行close().它们没有什么本质的区别,你可以通过reflector来证明这点
Q:与close()相比,connection.dispose()会将连接些移除吗?
A:不会
A:我们毫无顾忌地用他们中的任意一个,或两个同时使用.在一个已经close或dipose()的连接中使用close()或dispose()是不会影响的
Q:Close()和Dispose()有什么不同,我应该用哪一个好?
A:它们做的是同一件事,你可以调用他们中的任意一个,或两个同时使用.
Q:你所说的"practically the same thing”是什么意思?
A:Dispose()将会通过sqlConnection来清理相关的连接,之后执行close().它们没有什么本质的区别,你可以通过reflector来证明这点
Q:与close()相比,connection.dispose()会将连接些移除吗?
A:不会
#8
Close函数和Dispose函数是一种约定。调用Close函数释放资源后可能还需要再次使用,
而Dispose函数释放的资源不再使用。
this.dispose()已经释放了实例占用的资源
this.close()只是关闭一些连接或少量资源,实例还是存在的
而Dispose函数释放的资源不再使用。
this.dispose()已经释放了实例占用的资源
this.close()只是关闭一些连接或少量资源,实例还是存在的
#9
那顺序是如何?~
#10
是否写了conn.close()就不用写conn.dispose()了?
#11
如果dispose()是释放实例后占用的资源,那么是否在这个过程中是否就已包含了close呢?
那是不是说我们在写时之需要写conn.dispose()就可以,而不需要在额外的写close()了呢?
那是不是说我们在写时之需要写conn.dispose()就可以,而不需要在额外的写close()了呢?
#12
其实在调用时不会用到con.dispose(),而是用到con.close().
其实很多时候我们都会忘记把连接关闭,不过.net提供了using指令可以自动关闭
用法
using(sqlconnection sqlcon=new sqlconnection("连接字符串"))
{
sqlcon.open()//在这里面只用打开就可以了
sqlcon.close()//这一句可以不要,因为执行完using()系统会自动关闭连接的。
}
一般要是手动关闭只用con.close()一下就可以了。不用释放。
其实很多时候我们都会忘记把连接关闭,不过.net提供了using指令可以自动关闭
用法
using(sqlconnection sqlcon=new sqlconnection("连接字符串"))
{
sqlcon.open()//在这里面只用打开就可以了
sqlcon.close()//这一句可以不要,因为执行完using()系统会自动关闭连接的。
}
一般要是手动关闭只用con.close()一下就可以了。不用释放。
#13
up
#14
先close 再 dispose
不过用using不是好点么.
不过用using不是好点么.
#15
con.dispose()是释放资源,而con.close()是关闭连接。
顺序没有什么先后。
顺序没有什么先后。
#16
用using比較好
#17
conn.close();
conn.close();
comm.Dispose();
tran.Dispose();
close是关闭对象对象,还没有销毁,就好比数据库连接你还可以open开
但dispose就不一样了,直接销毁资源了,你再open会报错的
conn.close();
comm.Dispose();
tran.Dispose();
close是关闭对象对象,还没有销毁,就好比数据库连接你还可以open开
但dispose就不一样了,直接销毁资源了,你再open会报错的
#18
没有必要dispose
#19
我个人认为用using 比较好
#20
1、先销毁事务
2、关闭连接
3、销毁连接
2、关闭连接
3、销毁连接
#21
只有实现了IDispose接口的对象才能用using块
连接对象关闭就可以了,没有必要销毁
#22
using 自动关闭就可以啦,没必要销毁
#23
先关闭,然后释放
因为关闭只是中断了与数据库的连接,但这个连接还被该程序占用着,没有释放,而数据库的连接数是有限的
所以你还用及时释放掉
因为关闭只是中断了与数据库的连接,但这个连接还被该程序占用着,没有释放,而数据库的连接数是有限的
所以你还用及时释放掉
#24
关注
#25
是的,其实反编译framework中的类就可以知道
dispose() 包含了close()
#26
学习了
#27
木有明白~请大侠明示
#28
我是否可以理解为顺序如下:
????
_tran.Dispose();
_comm.Dispose();
_conn.Close();
_conn.Dispose();
????
#29
我们做的项目通常是想Close(),再Dispose()的
#30
我不要想当然~
我要知道最终的结果~
我要知道最终的结果~
#31
up
#32
数据库连接有链接池的概念,当close一个链接,这个链接对象可能还存在连接池里面;等其它请求进行调用;如果dispose就直接把这个对象销毁了。
#33
我觉得、我习惯性的写法:
conn.close();
conn.Dispose();
如果非要都写上,那我就:
conn.close();
tran.Dispose();
comm.Dispose();
conn.Dispose();
#34
comm.Dispose();
conn.close();
#35
学习了
#36
查看IL代码你可以发现,一般的非托管类里面的close方法都是调用dispose()方法的
#37
肯定最后con.close()膝盖都想到了···
#38
up
#39
和打开的顺序相反,先打开的最后关
#40
只有一句
是必要的,其它的都是多余的。
不过这一句你也最好不要直接写,应该使用using结构来 确保自动地调用它。
conn.Dispose();
是必要的,其它的都是多余的。
不过这一句你也最好不要直接写,应该使用using结构来 确保自动地调用它。
#41
大哥,有没有关于using结构的相关文章供我学习一下~
鞠躬~
#42
comm.Dispose();
conn.close();
conn.close();
#43
用USING 不要明白太多。我是這樣的
#44
mark!~
#45
只想说一点:调用了close之后就没有调用Dispose了,因为close里面已经调用过Dispose了
#46
同意4楼的
正常的顺序是
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
using的用法是这样的
using(SqlConnection sqlConn = new SqlConnection(connstr))
{
string strsql = "INSERT INTO ADDRESS001 (F001,F002,F003) VALUES (@F001,@F002,@F003)";
SqlCommand CmdObj = new SqlCommand();
CmdObj.Connection=sqlConn;
CmdObj.CommandText=strsql;
CmdObj.Parameters.Add("@F001",SqlDbType.VarChar);
CmdObj.Parameters.Add("@F002",SqlDbType.Int);
CmdObj.Parameters.Add("@F003",SqlDbType.Int);
CmdObj.Parameters["@F001"].Value=group.group_name;
CmdObj.Parameters["@F002"].Value=group.order;
CmdObj.Parameters["@F003"].Value=group.user_id;
try
{
sqlConn.Open();
CmdObj.ExecuteNonQuery();
result=1;
errorinfo="分组添加成功!";
}
catch(System.Data.SqlClient.SqlException err)
{
result=-1;
errorinfo="分组添加失败:数据库操作出错!"+err;
}
finally
{
sqlConn.Close();
}
}
正常的顺序是
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
using的用法是这样的
using(SqlConnection sqlConn = new SqlConnection(connstr))
{
string strsql = "INSERT INTO ADDRESS001 (F001,F002,F003) VALUES (@F001,@F002,@F003)";
SqlCommand CmdObj = new SqlCommand();
CmdObj.Connection=sqlConn;
CmdObj.CommandText=strsql;
CmdObj.Parameters.Add("@F001",SqlDbType.VarChar);
CmdObj.Parameters.Add("@F002",SqlDbType.Int);
CmdObj.Parameters.Add("@F003",SqlDbType.Int);
CmdObj.Parameters["@F001"].Value=group.group_name;
CmdObj.Parameters["@F002"].Value=group.order;
CmdObj.Parameters["@F003"].Value=group.user_id;
try
{
sqlConn.Open();
CmdObj.ExecuteNonQuery();
result=1;
errorinfo="分组添加成功!";
}
catch(System.Data.SqlClient.SqlException err)
{
result=-1;
errorinfo="分组添加失败:数据库操作出错!"+err;
}
finally
{
sqlConn.Close();
}
}
#47
我也一直是先Close再Dispose都没出现过什么问题
#48
应该是 先清理 在关闭!
#1
沙发~
#2
conn关闭连接方在最后把。。。
#3
先清理再关。
#4
正常的顺序是
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
不过你要是反着来也行,
1.Command.Dispose(),若Command上有未提交的事务,则自动Rollback.
2.Connection.Close().不会调用Command.Dispose(),但事务会Rollback.
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
不过你要是反着来也行,
1.Command.Dispose(),若Command上有未提交的事务,则自动Rollback.
2.Connection.Close().不会调用Command.Dispose(),但事务会Rollback.
#5
tran.Dispose();
comm.Dispose();
conn.close();
本人觉得应该是这样,不知道原因,但知道嵌套。
#6
tran.Dispose();
comm.Dispose();
conn.close();
comm.Dispose();
conn.close();
#7
Q:我上面的代码中如果没有异常抛出的话,我可以使用close()或dispose()吗
A:我们毫无顾忌地用他们中的任意一个,或两个同时使用.在一个已经close或dipose()的连接中使用close()或dispose()是不会影响的
Q:Close()和Dispose()有什么不同,我应该用哪一个好?
A:它们做的是同一件事,你可以调用他们中的任意一个,或两个同时使用.
Q:你所说的"practically the same thing”是什么意思?
A:Dispose()将会通过sqlConnection来清理相关的连接,之后执行close().它们没有什么本质的区别,你可以通过reflector来证明这点
Q:与close()相比,connection.dispose()会将连接些移除吗?
A:不会
A:我们毫无顾忌地用他们中的任意一个,或两个同时使用.在一个已经close或dipose()的连接中使用close()或dispose()是不会影响的
Q:Close()和Dispose()有什么不同,我应该用哪一个好?
A:它们做的是同一件事,你可以调用他们中的任意一个,或两个同时使用.
Q:你所说的"practically the same thing”是什么意思?
A:Dispose()将会通过sqlConnection来清理相关的连接,之后执行close().它们没有什么本质的区别,你可以通过reflector来证明这点
Q:与close()相比,connection.dispose()会将连接些移除吗?
A:不会
#8
Close函数和Dispose函数是一种约定。调用Close函数释放资源后可能还需要再次使用,
而Dispose函数释放的资源不再使用。
this.dispose()已经释放了实例占用的资源
this.close()只是关闭一些连接或少量资源,实例还是存在的
而Dispose函数释放的资源不再使用。
this.dispose()已经释放了实例占用的资源
this.close()只是关闭一些连接或少量资源,实例还是存在的
#9
那顺序是如何?~
#10
是否写了conn.close()就不用写conn.dispose()了?
#11
如果dispose()是释放实例后占用的资源,那么是否在这个过程中是否就已包含了close呢?
那是不是说我们在写时之需要写conn.dispose()就可以,而不需要在额外的写close()了呢?
那是不是说我们在写时之需要写conn.dispose()就可以,而不需要在额外的写close()了呢?
#12
其实在调用时不会用到con.dispose(),而是用到con.close().
其实很多时候我们都会忘记把连接关闭,不过.net提供了using指令可以自动关闭
用法
using(sqlconnection sqlcon=new sqlconnection("连接字符串"))
{
sqlcon.open()//在这里面只用打开就可以了
sqlcon.close()//这一句可以不要,因为执行完using()系统会自动关闭连接的。
}
一般要是手动关闭只用con.close()一下就可以了。不用释放。
其实很多时候我们都会忘记把连接关闭,不过.net提供了using指令可以自动关闭
用法
using(sqlconnection sqlcon=new sqlconnection("连接字符串"))
{
sqlcon.open()//在这里面只用打开就可以了
sqlcon.close()//这一句可以不要,因为执行完using()系统会自动关闭连接的。
}
一般要是手动关闭只用con.close()一下就可以了。不用释放。
#13
up
#14
先close 再 dispose
不过用using不是好点么.
不过用using不是好点么.
#15
con.dispose()是释放资源,而con.close()是关闭连接。
顺序没有什么先后。
顺序没有什么先后。
#16
用using比較好
#17
conn.close();
conn.close();
comm.Dispose();
tran.Dispose();
close是关闭对象对象,还没有销毁,就好比数据库连接你还可以open开
但dispose就不一样了,直接销毁资源了,你再open会报错的
conn.close();
comm.Dispose();
tran.Dispose();
close是关闭对象对象,还没有销毁,就好比数据库连接你还可以open开
但dispose就不一样了,直接销毁资源了,你再open会报错的
#18
没有必要dispose
#19
我个人认为用using 比较好
#20
1、先销毁事务
2、关闭连接
3、销毁连接
2、关闭连接
3、销毁连接
#21
只有实现了IDispose接口的对象才能用using块
连接对象关闭就可以了,没有必要销毁
#22
using 自动关闭就可以啦,没必要销毁
#23
先关闭,然后释放
因为关闭只是中断了与数据库的连接,但这个连接还被该程序占用着,没有释放,而数据库的连接数是有限的
所以你还用及时释放掉
因为关闭只是中断了与数据库的连接,但这个连接还被该程序占用着,没有释放,而数据库的连接数是有限的
所以你还用及时释放掉
#24
关注
#25
是的,其实反编译framework中的类就可以知道
dispose() 包含了close()
#26
学习了
#27
木有明白~请大侠明示
#28
我是否可以理解为顺序如下:
????
_tran.Dispose();
_comm.Dispose();
_conn.Close();
_conn.Dispose();
????
#29
我们做的项目通常是想Close(),再Dispose()的
#30
我不要想当然~
我要知道最终的结果~
我要知道最终的结果~
#31
up
#32
数据库连接有链接池的概念,当close一个链接,这个链接对象可能还存在连接池里面;等其它请求进行调用;如果dispose就直接把这个对象销毁了。
#33
我觉得、我习惯性的写法:
conn.close();
conn.Dispose();
如果非要都写上,那我就:
conn.close();
tran.Dispose();
comm.Dispose();
conn.Dispose();
#34
comm.Dispose();
conn.close();
#35
学习了
#36
查看IL代码你可以发现,一般的非托管类里面的close方法都是调用dispose()方法的
#37
肯定最后con.close()膝盖都想到了···
#38
up
#39
和打开的顺序相反,先打开的最后关
#40
只有一句
是必要的,其它的都是多余的。
不过这一句你也最好不要直接写,应该使用using结构来 确保自动地调用它。
conn.Dispose();
是必要的,其它的都是多余的。
不过这一句你也最好不要直接写,应该使用using结构来 确保自动地调用它。
#41
大哥,有没有关于using结构的相关文章供我学习一下~
鞠躬~
#42
comm.Dispose();
conn.close();
conn.close();
#43
用USING 不要明白太多。我是這樣的
#44
mark!~
#45
只想说一点:调用了close之后就没有调用Dispose了,因为close里面已经调用过Dispose了
#46
同意4楼的
正常的顺序是
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
using的用法是这样的
using(SqlConnection sqlConn = new SqlConnection(connstr))
{
string strsql = "INSERT INTO ADDRESS001 (F001,F002,F003) VALUES (@F001,@F002,@F003)";
SqlCommand CmdObj = new SqlCommand();
CmdObj.Connection=sqlConn;
CmdObj.CommandText=strsql;
CmdObj.Parameters.Add("@F001",SqlDbType.VarChar);
CmdObj.Parameters.Add("@F002",SqlDbType.Int);
CmdObj.Parameters.Add("@F003",SqlDbType.Int);
CmdObj.Parameters["@F001"].Value=group.group_name;
CmdObj.Parameters["@F002"].Value=group.order;
CmdObj.Parameters["@F003"].Value=group.user_id;
try
{
sqlConn.Open();
CmdObj.ExecuteNonQuery();
result=1;
errorinfo="分组添加成功!";
}
catch(System.Data.SqlClient.SqlException err)
{
result=-1;
errorinfo="分组添加失败:数据库操作出错!"+err;
}
finally
{
sqlConn.Close();
}
}
正常的顺序是
Trans.Commit
Trans.Dispose()
Command.Dispose()
Connection.Close()
Connection.Dispose()
using的用法是这样的
using(SqlConnection sqlConn = new SqlConnection(connstr))
{
string strsql = "INSERT INTO ADDRESS001 (F001,F002,F003) VALUES (@F001,@F002,@F003)";
SqlCommand CmdObj = new SqlCommand();
CmdObj.Connection=sqlConn;
CmdObj.CommandText=strsql;
CmdObj.Parameters.Add("@F001",SqlDbType.VarChar);
CmdObj.Parameters.Add("@F002",SqlDbType.Int);
CmdObj.Parameters.Add("@F003",SqlDbType.Int);
CmdObj.Parameters["@F001"].Value=group.group_name;
CmdObj.Parameters["@F002"].Value=group.order;
CmdObj.Parameters["@F003"].Value=group.user_id;
try
{
sqlConn.Open();
CmdObj.ExecuteNonQuery();
result=1;
errorinfo="分组添加成功!";
}
catch(System.Data.SqlClient.SqlException err)
{
result=-1;
errorinfo="分组添加失败:数据库操作出错!"+err;
}
finally
{
sqlConn.Close();
}
}
#47
我也一直是先Close再Dispose都没出现过什么问题
#48
应该是 先清理 在关闭!