做的一个项目,开发语言是asp.net 使用的数据库是access
数据绑定的之前有判断 看dataset是否为空 如果为空则提示数据没有加载进来
跳转页面,如果不为空则绑定
但是有时候浏览的时候,会出现跳转,知道原因是数据没有加载进来
数据量不大,就是有时候访问数据库的次数太多
有没有好一点的办法可以避免这种情况。
期待高人指点,谢了!

解决方案 »

  1.   


    你这么做很奇怪
    只有判断 有没有 缓存   没有再加载数据的你判断dataset 是为什么呢
      

  2.   

    就是点击某些按钮之后,重新从数据库中读取要显示的数据
    放到一个dataset对象中,然后与数据控件绑定
    绑定之前判断一下这个对象是否为空,如果为空就给个提示
    然后跳转页面。为空证明数据没有加载进来
      

  3.   

    连接及时关闭using(oledbconnection
    select count(*) from ...
      

  4.   

    DataSet ds = new DataSet();
    ds = NewsBLL.GetListByPager(typeId,pageIndex,pageSize);
    if (ds != null)
    {
         gvShow.DataSource = ds;
         gvShow.DataBind();
    }
    else
    {
         Common.showResult(this, "网络不稳定,请稍候再试!", "index.aspx");
    }
    就像这样的,如果结果集对象为空,怎给个提示然后跳转页面
    偶尔会出现else里面的情况
    连接数据库的时候那个命令对象设定了超时时间 command.CommandTimeOut=90;
    可能跟连接数量有关系吧,有时候绑定的时候需要访问很多次数据库,才能获得想要的数据!
      

  5.   

    可能是NewsBLL.GetListByPager代码的问题。你使用了static类型了吧?
      

  6.   

    try
    {
        adapter.Fill(ds);
    }
    catch (Exception ex)
    {
        ds = null;
    }
    finally
    {
        Close();
    }
    连接数据库的方法都是这样写的 先打开连接,获得数据之后,关闭连接(没有用到sqlDataReader)。
    像绑定treeview那样的数据,大家一般是怎么做的?
    取一次数据,可能连接了很多次数据库,有没有好一点的方法?
      

  7.   

    public static string GetSecAndThi(int firId)
    {
         string id = "";
         string result = "";
         StringBuilder builder = new StringBuilder();
         DataSet ds = new DataSet();
         ds = ProTypeDAL.GetAll(firId);
         if (ds != null)
         {
              if (ds.Tables[0].Rows.Count > 0)
              {
                   foreach (DataRow row in ds.Tables[0].Rows)
                   {
                       DataSet ds1 = new DataSet();
                       ds1 = ProTypeDAL.GetAll(Convert.ToInt32(row["id"].ToString()));
                       if (ds1 != null)
                       {
                           if (ds1.Tables[0].Rows.Count > 0)
                           {
                               foreach (DataRow row1 in ds1.Tables[0].Rows)
                               {
                                   DataSet ds2 = new DataSet();
                                   ds2 = ProTypeDAL.GetAll(Convert.ToInt32(row1["id"].ToString()));
                                   if (ds2 != null)
                                   {
                                      if (ds2.Tables[0].Rows.Count > 0)
                                      {
                                           foreach (DataRow row2 in ds2.Tables[0].Rows)
                                           {
                                               builder.Append(row2["id"].ToString() + ",");
                                           }
                                      }
                                      else
                                      {
                                           builder.Append(row1["id"].ToString() + ",");
                                      }
                                 }
                            }
                        }
                        else
                        {
                           builder.Append(row["id"].ToString() + ",");
                        }
                    }
                }
            }
        }
        result = builder.ToString();
        return result;
    }
    就是这个方法,调用一次就会连接很多次数据库。就是传过来一个一级分类编号,获得这个分类下的二级和三级,四级分类编号 有没有好一点的办法,可以一次加载出来想要的数据。
    表的结构是这样的
    id,parentId,name
      

  8.   

    DataSet一块弄下来,然后用select()筛选过滤呢,这样是不是就连接1次数据库了。
      

  9.   

    嗯 现在就改成这样了 查询出来完放到一个dataset对象选中   然后从这个dataset对象中检索需要的数据
    但是用的是access数据库 操作表的时候会加锁
    然后再查询数据的时候就会查不到数据
    不知道高人们都是怎么解决这种情况的?
      

  10.   

    select的时候为什么要加锁呢?
      

  11.   

    Access不支持大量的并发访问,并发多的请采用SQL Server等专业的数据库。