还是获得DATASET然后再转DATAVIEW吧

解决方案 »

  1.   

    我不需要创建DATASET,我只做数据呈现,使用DATASET只是浪费资源,但又要获取指定行的数据记录.
      

  2.   

    sqlDataReader[rowindex][colindex].ToString()
      

  3.   

    楼上的方法行不通,无法将带[]的索引应用于object类型的表达式
      

  4.   

    SqlDataReader只能向前的,就是说不能取指定行。
    可以定义System.Data.DataTable dt;把SqlDataReader的值保存到dt。System.Data.DataTable dt = new System.Data.DataTable;
    int i =0;
    wihle (dr.read())
    {
        for (int j=0;j<dr.FieldCount;j++)
        {
             dt.Rows[i][j]= dr[j];
        }
        i++;
    }
    System.Data.DataView dv = dt.DefaultView;
      

  5.   

    为什么要获得一个SqlDataReader对象再转成DataView呢?
    用DataSet就搞定了,老兄试一下
      

  6.   

    为的是节约资源,我现在用的我只对数据做呈现,不做修改,用DATASET方法会构建一个XML,速度就会变慢
    黑月说的方法同样也会降低执行速度
      

  7.   

    SqlDataAdapter da= new SqlDataAdapter(db.Sql,db.conn);
    DataSet ds = new DataSet();
    da.Fill(ds, "text");
    DataView dv = ds.Tables["text"].DefaultView;;
                
    DataList1.DataSource = dv;
    DataList1.DataBind();
    ShowPageStatus(dv.Count);
      

  8.   

    db.Sql="select * from news_text where id ="+Request.QueryString["id"]+"";
    try
    {
    cmd = new SqlCommand(db.Sql,db.conn);
    cmd.Connection.Open();
    SqlDataReader dr = cmd.ExecuteReader();
    if(dr.Read())
    {
    ReTitle.Text = dr["title"].ToString();
    ReAuthor.Text = dr["author"].ToString();
    Recontent.Text = dr["content"].ToString();
    }
    cmd.Connection.Close();
    }
    catch(SqlException E)
    {
    Response.Write(E.ToString());
    }
      

  9.   

    回复人: moonlight007(离人影) ( ) 信誉:100  2004-08-27 10:40:00  得分: 0  
     
     
       楼上的方法行不通,无法将带[]的索引应用于object类型的表达式
     
     
    ---------------------
    SqlDataReader reader=cmd.ExecuteReader();
     while(reader.Read())
    {
       for(int i=0;i<reader.Field;i++)
      {
        str+=reader[i]+",";
       }
    }
      

  10.   

    SqlDataReader reader=cmd.ExecuteReader();
     while(reader.Read())
    {
       for(int i=0;i<reader.FieldCount;i++)
      {
        str+=reader[i]+",";
       }
    }
      

  11.   

    可以的,但是你得先创建一个DataView,再用While循环写入到DataView中,之后你就可以直接绑定到DataGrid或者其他控件上了
      

  12.   

    不明楼主是如何思考这个问题,你这样不是耗更多资源,而且老要打开SQL数据库连接????????????????????????????????????
      

  13.   

    楼主的问题有矛盾,
    既然不要建立DataSet,那就建立一个DataTable行不,如果DataTable都不要,那哪来的DataView.没有表哪有视图。
    如果楼主能忍受DataAdapter.Fill(DataTable dt);方法那还行,(其实速度不慢)
    第二种其实也差不多:
    DataTable dt = new DataTable();
    .....
    dt.BeginLoadData();
    while(reader.Read())
    {
       object[] newRow = new object[reader.FieldCount];
       newRow[0]  = reader[0];
       newRow[1]  = reader[1];
    ....
      dt.LoadDataRow(newRow, true);}
    dt.EndLoadData();还有一种就是
    定义一个类如DataInfo,表示单条纪录,然后在Reader.Read()循环中生成添加到ArrayList中,绑定ArrayList就行。但是我认为最快的速度还是直接绑定DataReader.