从一个新手遇到的问题看DataReader

28 篇文章 0 订阅
            今天一个网友在群里面问如下代码有没有问题,如下:
            SqlConnection conn;
            SqlCommand cmd;
            SqlDataReader dr;

            conn = new SqlConnection(ConfigurationSettings.AppSettings["constring"]);
            conn.Open();

            cmd =new SqlCommand("select * from questions",conn);
            dr = cmd.ExecuteReader();
            dr.Read();
            Session["number"] = dr["Question_number"];
            Label2.Text = Session["number"].ToString();
                       
            DataList1.DataSource = dr;
            DataList1.DataBind();
            dr.Close();

            cmd.CommandText = "select * from choose where Question_number=@question";
            cmd.Parameters.Add("@question",Session["number"].ToString());
            dr = cmd.ExecuteReader();
            DataList1.DataSource = dr;
            DataList1.DataBind();

            dr.Close();
            conn.Close(); 

表面上看来,代码应该是正确的。但是他却总得不到他想要的结果。Why?

他忽略了一个关键的问题,DataReader。
它是单向的,当首先运行了代码中黄色部分,移动到下一条,再进行数据绑定(灰色背景部分),则首条记录因已经被读出,而在数据绑定控件中是看不不到的。
当然我希望这只是个别人遇到的问题而已。

PS:这段程序还有几个需要思考的地方
1、session是否必要(因为我不知道他要用到这个值得范围,所以在这里仅表示推测)
2、DataReader的关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值