CommandType的设置是为了区别传入普通SQL语句还是存储过程的,普通SQL语句使用CommandType,Text,存储过程使用CommandType.StoredProcedure
传过去的SqlDataReader在外部调用时释放,在写SqlHelper时返回ExecuteReader时加入参数CommandBehavior.CloseConnection, 如下:
public static SqlDataReader ExecuteDataReader(string sql, CommandType cmdType, params SqlParameter[] pms)
{
SqlConnection conn = new SqlConnection(constr);
try
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.CommandType = cmdType;
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
conn.Open();
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
catch
{
conn.Dispose();
throw;
}
} |