类中的方法public SqlDataReader Dr(Dictionary<string,string> parms,string ctext)
    {
        SqlConnection con = this.Dbcon();
        SqlCommand cmd = new SqlCommand(ctext,con);
        foreach (KeyValuePair<string, string> kv in parms)
        {
            cmd.Parameters.AddWithValue(kv.Key,kv.Value);
        }
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        con.Close();
        return dr;
    }页面中的调用            Cldb cldb=new Cldb();
            Dictionary<string, string> parmsRead = new Dictionary<string, string>();
            parmsRead.Add("@UserName", strUsername);
            SqlDataReader da = cldb.Dr(parmsRead, sql2);
            
            while (da.Read())
            {
                UserID = da.GetGuid(0);
            }这样写会报错Invalid attempt to call Read when reader is closed.想问一下高手怎么修改呢?我主要是想把数据库调用放到类中,但是类中不出现类似
UserID = da.GetGuid(0);这样的特殊代码,以便于日后在其他程序里继续调用,所以UserID = da.GetGuid(0);这样的代码只能写在页面中.

解决方案 »

  1.   

    一般返回dataset或者datatable就好了,因为它们是离线的数据集而reader你要控制连接的关闭,类里先关了用不了,调用的时候再关又不好。
      

  2.   

    public SqlDataReader Dr(Dictionary<string,string> parms,string ctext)
    {
        SqlConnection con = this.Dbcon();
        SqlCommand cmd = new SqlCommand(ctext,con);
        foreach (KeyValuePair<string, string> kv in parms)
        {
            cmd.Parameters.AddWithValue(kv.Key,kv.Value);
        }
        con.Open();
        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//当关闭DataReader时自动关闭Connection
        // con.Close();不能关闭
        return dr;
    }
      

  3.   

    SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    这样就可以了,                       返回dataset,datable,dr,用到那个返回那个。
      

  4.   

                while (da.Read())
                {
                    UserID = da.GetGuid(0);
                }
    写到类中,返回数组或集合
    返回 SqlDataReader 不是高明的方法
      

  5.   

           
    foreach (KeyValuePair<string, string> kv in parms)
            {
                cmd.Parameters.AddWithValue(kv.Key,kv.Value);
            }
    -_-! 直接添加参数进去就可以了。还要用泛型循环一遍—_—!