RT,调试的时候没有任何问题,但发布到iis上时,多点十几下连接数就会到达512页面提示错误,查找源头是这个方法,但该释放、该关闭的都释放关闭了,还有什么方法?在配置文件上也写了限制,可还是报错/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <param name="dataSet">返回DataReader对象</param>
public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
{
///创建Command
SqlCommand cmd = CreateProcCommand(procName, prams); try
{
///读取数据
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{ dataReader = null;
//dataReader.Close();
///记录错误日志
SystemError.CreateErrorLog(ex.Message);
}
finally
{
cmd.Dispose();
}
}
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程的名称</param>
/// <param name="prams">存储过程所需参数</param>
/// <param name="dataSet">返回DataReader对象</param>
public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
{
///创建Command
SqlCommand cmd = CreateProcCommand(procName, prams); try
{
///读取数据
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch (Exception ex)
{ dataReader = null;
//dataReader.Close();
///记录错误日志
SystemError.CreateErrorLog(ex.Message);
}
finally
{
cmd.Dispose();
}
}
{
dt=null;
}
没有正常关闭数据库连接。
SqlCommand cmd = CreateProcCommand(procName, prams); ///读取数据
using(SqlDataReader dataReader = cmd.ExecuteReader())
{
while(dataReader.Read())
{
进行你的处理
}
}
[/code]
你完全没有必要把它封装为什么单独的方法。
using(SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while(dataReader.Read())
{
调用方法处理一条记录(datareader);
}
}或者 SqlCommand cmd = CreateProcCommand(procName, prams);
using(SqlDataReader dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
调用方法处理遍历整个结果集和(datareader);
}
这包括了你的全部代码代码,写起来也不复杂啊。你何必把它搞什么封装呢?直接在调用你的RunProc的原来的地方直接这样写不就好了嘛。就算你封装什么RunProc方法,别人也没有必要用它啊。
还有可以在调用结束以后调用conn。close()方法
使用Using 自动释放链接
你的是cmd 释放了,但是你的SqlConnect链接没有Open