日期:2014-05-17  浏览次数:20743 次

这段代码,第二个datareader 读取不到数据
private void product_Load(object sender, EventArgs e)
        {
            this.CenterToScreen();
            Means mymeans = new Means();
            SqlDataReader sdr_1 = mymeans.getDataReader(@"select top 1 num from product order by id desc");
            string num = "";
            while (sdr_1.Read())
            {
                num = sdr_1.GetString(0);
            }
            int i = Convert.ToInt32(num) + 1;
            txtnum.Text = i.ToString();
            sdr_1.Dispose();
            sdr_1.Close();
            SqlDataReader sdr_2 = mymeans.getDataReader(@"select name from frim");
            while (sdr_2.Read()) 
            {
                cbofrim.Items.Add(sdr_2[0].ToString());
            }
            sdr_2.Dispose();
            sdr_2.Close();

getDataReader 是自定义方法,这个肯定没问题,我把上面的str_1注释掉,后边就能得到数据了

------解决方案--------------------
你在 sdr_2前,Means mymeans_2 = new Means();
然后  SqlDataReader sdr_2 = mymeans_2.getDataReader(@"select name from frim");
看看,会出现数据不。
------解决方案--------------------
很明显 确实是你这个方法的问题,你的 my_con,my_cmd是非托管资源, 用过之后要释放资源

引用:
,public SqlDataReader getDataReader(string SQLstr)   
        {
            getcon();
            SqlCommand my_cmd = my_con.CreateCommand();
            my_cmd.CommandType = CommandType.Text;              
              my_cmd.CommandText = SQLstr;
            SqlDataReader sdr = my_cmd.ExecuteReader();         
              return sdr;