先看代码吧.
 //根据SQL语句返回DataSet对像;
    public static  DataSet pbDs(string sqlStr)
    {
        DataSet ds = new DataSet();
        SqlDataAdapter sda = new SqlDataAdapter();
        try
        {
            comm.CommandType = CommandType.Text;
            comm.CommandText = sqlStr;
            openConn();
            sda.SelectCommand = comm;
            sda.Fill(ds, "temptable");
        }
        catch (Exception e)
        {
            System.Web.HttpContext.Current.Response.Write("错误信息4:" + e.Message);
        }
       finally
        {
            ds.Dispose();
            sda.Dispose();
            closeConn();
        }
        return ds;
    }先说这样写行吗?
finally里的不是说最终执行吗?ds.Dispose();这样一句,return ds还有什么意义吗?
不知道哪位给解释一下行吗?我自己都糊涂了.

解决方案 »

  1.   

    hechli1979() ( ) 信誉:100    Blog  2006-11-06 19:39:00  得分: 0  
     
     
    return ds;放到finally
    ______________________________finally不允许有return语句。================================ds.Dispose();   //这句去掉
    不然你返回的ds有什么用?
      

  2.   

    return ds 放到try的最后一句后面
      

  3.   

    代码没有问题,正确的Dispose只是销毁一些系统资源,如:窗体句柄,DB连接和图形设备等。但它不释放系统占有的内存资源。所以你DataSet中的数据仍然存在。可以正常返回。我人为,Dispose释放的资源不包括内存资源。
      

  4.   

    TO:viena(维也纳nn) return rs不是返回值吗?
    TO:www_123du_com(鼠·神·泪) 我去了可以执行,不去照样执行,都不出错哦.所以我苦恼呢.
    TO:hhg_15(ジ忘却的记忆)明白你的意思.在try里放return ds catch里放return null;这样可以,不会提示说"不是每个子句都有返回值.".那不是我想要的结果.
    TO:smartstar2005() (....我跟你想法倒一样,不知道以后这样用会不会有问题.有权威人士指点吗?感谢各位..越讨论越有意思..顶...兄弟,接着说,都讲的很有道理.失败中可以学到更多东西.
      

  5.   

    To hkxing()不会有问题,除非你还用它的连接(Connection)DB连接在Dispose的时候已经没有了
      

  6.   

    同意: www_123du_com(鼠·神·泪)
      

  7.   

    TO:smartstar2005() 你的意思是?ds.Dispose()去掉了.
      

  8.   

    To hkxing()ds.Dispose()销毁了DB连接
      

  9.   

    楼上意思是ds.Dispose()只销毁了连接,没销毁数据? 有空验证一下,跟原来理解不一样。
      

  10.   

    dataset是无连接数据集,跟连接根本没关系么。
      

  11.   

    TO greatqn(一剑)无连接数据集不代表它没有使用DB连接这里的"连接"和"无连接"的"连接"概念不一样
      

  12.   

    ds.Dispose()只销毁了连接,没销毁数据? 那conn.close()和conn.Dispose()是吃饭的了?
    是不是这样啊.
    一:如果没有返回值的方法,像ExecuteNonQuery这样的.我们就用finally进行关闭所有的.不会出错.
    二:如果有返回值,像DataSet这样的方法.只果只是查询用,也可以关闭.
    三:如果是有返回值,并且需要返回来修改数据库的.就不要关闭???但是关闭了也没有关系啊.不是每次执行这个方法的时候又会打开吗?越学越糊涂..................糊涂中.....