public partial class studnet_NewsDetails : System.Web.UI.Page 

protected void Page_Load(object sender, EventArgs e) 

if (!IsPostBack) 

newdatabinder(); 


private void newdatabinder() 
//查看新闻内容函数方法 

string str; 
str = Request.QueryString["qid"].ToString(); 
OleDbConnection con = db.con(); 
con.Open(); 
OleDbCommand cmd = new OleDbCommand("select * from News where qid=@qid", con); cmd.Parameters.Add("@qid", SqlDbType.VarChar); 
cmd.Parameters["@qid"].Value = str; 
OleDbDataReader sdr = cmd.ExecuteReader(); 
if (sdr.Read()) 

this.label1.Text = "问题标题:" + sdr["Nname"].ToString() + "<br>" + "发表时间:" + sdr["Ntime"].ToString(); 
this.labelnewsdetail.Text = sdr["Ncount"].ToString(); 



总是显示数据库中第一条数据的值, 
应该是参数传递的问题,不知道怎么改。 
请高手指点,我是新手

解决方案 »

  1.   

    string str;  
    str = Request.QueryString["qid"]==null?"":Request.QueryString["qid"].ToString();  
    using(OleDbConnection con = db.con())
    {
    con.Open(); 
    OleDbCommand cmd = new OleDbCommand("select * from News where qid=@qid", con);  
    cmd.Parameters.Add("@qid", SqlDbType.VarChar);  
    cmd.Parameters["@qid"].Value = str;  
    OleDbDataReader sdr = cmd.ExecuteReader();  
    while(sdr.Read())  
    {  
    this.label1.Text = "问题标题:" + sdr["Nname"].ToString() + "<br>" + "发表时间:" + sdr["Ntime"].ToString();  
    this.labelnewsdetail.Text = sdr["Ncount"].ToString(); 

    }  
      

  2.   

    if (sdr.Read()) 这里的原因,你这个只是判断是否有值,有的话你就显示了一笔记录也就是第一笔,
    改成while(sdr.Read()) 就可以了~
      

  3.   

    一楼二楼的都正确不过你也可以用foreach 来搞也行
      

  4.   

    if (sdr.Read())  改成 while(sdr.Read()) ,这样才会循环读出数据表格中的所有内容
      

  5.   

    是这句出错了,OleDbCommand cmd = new OleDbCommand("select * from News where qid=@qid", con);  
    应该修改为:OleDbCommand cmd = new OleDbCommand("select * from News where Nid=@qid", con);  
    因为这个是从网上下载的源程序,而数据库中表News中字段是Nid,