关于using{SqlCommand cmd=new SqlCommand}的一些问题
以前用的时候一直这样写
private void Open(baseType dbtype)
{
if(cnn==null)
{
cnn=CreateConnection(this.ConnectionString,dbtype);
}
if(cnn.State!=ConnectionState.Open)
cnn.Open();
}
public object ExecuteScalar(string CommandText)
{
if(CommandText==null) throw new ArgumentNullException("Command is Null!");
object obj;
using(cmd=this.CreateCommand(CommandText))
{
Open(this.BaseType);
obj=cmd.ExecuteScalar();
// Close();本来认为这里如果不用close的话,在调用该方法后这个connection对象也应该关闭才对,结果测试连接然是打开的,也就是说必须手工关闭.难道using的回收机制不起作用了吗?
return obj;
}
}
问题点数:20、回复次数:4Top
1 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2006-03-16 00:59:56 得分 10
凭什么认为它关闭了?找出根据来(给个url)?!Top
2 楼syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2006-03-16 01:19:28 得分 10
不是不起用,是你没理解using干什么用的
using(A){B}
其实跟
try{
B
}
finally
{
Dispose掉A中的资源.
}
是一样的,不同写法而已,所以你需要在using后面的括号中写Connection而不是Command,这样就会释放连接了.
另外,如果2值用DataReader,也可以把Reader放()里面,并在ExecuteReader(#####)里指定#####的枚举值为 CloseConnection (也许拼写错了,呵呵...) 就可以.
另外如果你的类中还有其他Adapter的话,是会帮你开连接的,这里需要留意Top
3 楼coley(唉~眼镜又厚了~)回复于 2006-03-16 09:06:21 得分 0
如果想到达这样的
using (SqlConnection conn=new SqlConnection())
{
conn.open();
cmd.ExecuteNonQuery() ;//这里的资源的释放应该怎么做?自己手工写还是会自动呢?有办法测试吗?
}Top
4 楼coley(唉~眼镜又厚了~)回复于 2006-03-16 10:52:35 得分 0
顶Top




