你先把connection.dispose()删除掉.就connection.close().
cmd.CommandText=proc_name;
cmd.CommandType=CommandType.StoredProcedure;
cmd.Connection=new clsPublic().ConnectDB();.....
try
{
cmd.ExecuteNonQuery();
ii=(int)cmd.Parameters["p_out"].Value;
}
catch
{
ii= -3;
}
finally
{
if (cmd.Connection.State==ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Dispose();
}
}
return ii;
}
cmd.CommandText=proc_name;
cmd.CommandType=CommandType.StoredProcedure;
cmd.Connection=new clsPublic().ConnectDB();.....
try
{
cmd.ExecuteNonQuery();
ii=(int)cmd.Parameters["p_out"].Value;
}
catch
{
ii= -3;
}
finally
{
if (cmd.Connection.State==ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Dispose();
}
}
return ii;
}
{
cmd.Connection.Close();
cmd.Dispose();
}--connection.close()只是关闭了联结.而dispose()则释放了该connection所占用的资源.
connection.Dispose()是销毁数据库连接的变量
dispose()则释放了该connection所占用的资源.
********************************************
Fatal NI connect error 12560,connecting to:
(DESCRIPTION=(ADDRESS=(PROTOCOL=BEQ)(PROGRAM=oracle)(ARGV0=oracleORCL)
(ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))'))(CONNECT_DATA=(SID=ORCL)
(CRD=PROGRAM=……)(HOST=……)(USER=Administrator))))VERSION INFORMATION:
TNS for 32bit Windows: Version 8.1.6.0.0 -
Production Oracle Bequeath NT Protocol Adapter for 32-bit Windows: Version 8.1.6.0.0
Production Windows NT TCP/IP NT Protocol
Time: 24-8月 -2004 16:32:08
Tracing not turned on.
Tns error struct:
nr err code: 0
ns main err code: 12560
TNS-12560: TNS:协议适配器出现错误
ns secondary err code: 0
nt main err code: 530
TNS-00530: 协议适配器错误
nt secondary err code: 126
nt OS err code: 0
private OleDbCommand cmd=new OleDbCommand(); #region 连接数据库
public OleDbConnection ConnectDB()
{
OleDbConnection conn=new OleDbConnection();
conn.ConnectionString=connectstring;
conn.Open();
return conn;
}
#endregion
调用上面返回一个联结.然后在前端执行的时候判断, public int Execute_proc_user(string flag,int p_user_id,string p_login_name,string p_password,string p_name,int p_power_id,string p_power_name,string p_telephone,string p_email,string proc_name)
{
cmd.Parameters.Clear();
cmd.Dispose();
int ii;
string p_flag=flag;
cmd.CommandText=proc_name;
cmd.CommandType=CommandType.StoredProcedure;
cmd.Connection=new clsPublic().ConnectDB(); cmd.Parameters.Add("p_flag",OleDbType.VarChar);
..... cmd.Parameters["p_out"].Direction=ParameterDirection.ReturnValue;
try
{
//你可以在这里判断连接断开情况,
if (cmd.connection.State==ConnectionState.Open)
{
//执行操作.
}
同一个cmd.connection,执行完成之前不要关闭.
cmd.ExecuteNonQuery();
ii=(int)cmd.Parameters["p_out"].Value;
}
catch
{
ii= -3;
}
//这里执行完成了以后关闭联结.
finally
{
if (cmd.Connection.State==ConnectionState.Open)
{
cmd.Connection.Close();
cmd.Dispose();
}
}
return ii;
} #endregion
你的意思我基本明白了,我发现很多人在结束数据库调用的时候总是先Close(),再Dispose(),这样做是有道理的吧?
另外关于我的问题,因为我测的是许多单位的Oracle数据库连通情况,而这些单位中有一些据我所知是装了防火墙的,这会不会是导致我执行到conn.Open()时死掉的原因呢?