在DataBase.cs里面
public static SqlDataReader RunProcGetReader(string procName, SqlParameter[] prams)
{
SqlCommand Cmd = CreateCmd(procName, prams);
SqlDataReader Dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
return Dr;
} public static SqlCommand CreateCmd(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = new SqlCommand();
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Connection = Conn;
Cmd.CommandText = procName;
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
if (parameter != null)
{
Cmd.Parameters.Add(parameter);
}
}
}
return Cmd;
}
在USER.CS类文件GetUser(int userid)函数里面
public SqlDataReader GetUser(int userid)
{
string procname = "dbo.GetUserinfo";
SqlParameter[] prams = { new SqlParameter("@TableName", SqlDbType.INt) };
prams[0].Value = userid;
SqlDataReader sr = new DataBase().RunProcGetReader(procname, prams);
return sr;
}在用户管理页面user_manage.aspx.cx调用GetUser()函数获得一个SqlDataReader。因为“CommandBehavior.CloseConnection”的原因,如果在GetUser里面关闭sr的话,conn同时也会关闭。但是现在在user_manage.aspx.cx页面SqlDataReader sr2 = new USER().GetUser(this.userid),最后关闭sr2.close(),等于传递多了一步,这样conn会关闭吗,如何进行测试?
public static SqlDataReader RunProcGetReader(string procName, SqlParameter[] prams)
{
SqlCommand Cmd = CreateCmd(procName, prams);
SqlDataReader Dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);
return Dr;
} public static SqlCommand CreateCmd(string procName, SqlParameter[] prams)
{
SqlConnection Conn = ReturnConn();
SqlCommand Cmd = new SqlCommand();
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Connection = Conn;
Cmd.CommandText = procName;
if (prams != null)
{
foreach (SqlParameter parameter in prams)
{
if (parameter != null)
{
Cmd.Parameters.Add(parameter);
}
}
}
return Cmd;
}
在USER.CS类文件GetUser(int userid)函数里面
public SqlDataReader GetUser(int userid)
{
string procname = "dbo.GetUserinfo";
SqlParameter[] prams = { new SqlParameter("@TableName", SqlDbType.INt) };
prams[0].Value = userid;
SqlDataReader sr = new DataBase().RunProcGetReader(procname, prams);
return sr;
}在用户管理页面user_manage.aspx.cx调用GetUser()函数获得一个SqlDataReader。因为“CommandBehavior.CloseConnection”的原因,如果在GetUser里面关闭sr的话,conn同时也会关闭。但是现在在user_manage.aspx.cx页面SqlDataReader sr2 = new USER().GetUser(this.userid),最后关闭sr2.close(),等于传递多了一步,这样conn会关闭吗,如何进行测试?
SqlDataReader 已经被你当作 dataset,datatable等当作数据容器来用了。
在RunProcGetReader中,你已经将数据读入SqlDataReader Dr,并且返回,这时候RunProcGetReader释放资源,就已经将引用中的CreateCmd的资源也自动释放了。SqlDataReader 已经成为你的脱机数据读取载体。