rt

解决方案 »

  1.   

    没直接的方法,你就自定义databale,dataset
    然后从datareader里一个一个读,插入datatable好了
      

  2.   


    While(dr.Reader()){//do something with the current record}
      

  3.   

    我一般都用SqlDataAdapter来把数据填充到datatable,dataset里,用sqldatareader的时候一般是前台控件绑定数据,或者传值显示数据的时候用的,这样应该比较好操作
      

  4.   

    我的意思是 这个sqldatareader已经绑定到一个listbox上了,能不能同时绑定到一个dataset,
    还是只能关闭dr,再写个dataadapter,绑定到ds上呢?
      

  5.   

    您可以先装入一个datatable里面,再进行绑定.这样就可以共享了.
      

  6.   

    楼主,我做了个简单的例子,你看下:前台代码:(其实也就添加了一个GridView)<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
        </form>
    </body>
    </html>
    后台代码:using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string strConn = "Data Source=.;Initial Catalog=master;UID=sa";
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand("SELECT * FROM systypes", conn);
                SqlDataReader reader = cmd.ExecuteReader();            //获得列数
                int count = reader.FieldCount;            //创建DataTable
                DataTable dt = new DataTable();
                //初始化列
                for (int i = 0; i < count; i++)
                {
                    dt.Columns.Add(new DataColumn(reader.GetName(i)));
                }            //添加内容
                DataRow dr;
                while (reader.Read())
                {
                    dr = dt.NewRow();
                    for (int i = 0; i < count; i++)
                    {
                        dr[i] = reader.GetValue(i);
                    }
                    dt.Rows.Add(dr);
                }            this.GridView1.DataSource = dt;
                this.GridView1.DataBind();
            }
        }
    }
    上面只是告诉你怎么实现从SqlDataReader读取数据到DataTable里,至于代码本身的使用价值不大,一般很少这样处理数据
      

  7.   

    既然你想用DataSet,干吗要DataReader读出来呢?
    你直接用DataSet取数据不就行了.
      

  8.   

    数据量太大,超过10万条以上的,用dataset太消耗内存,用datareader一条一条读出来,再写插入另一个表呢?是不是也这样呢?