如何把sqldatareader执行的结果保存到datatable,dataset里? rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没直接的方法,你就自定义databale,dataset然后从datareader里一个一个读,插入datatable好了 While(dr.Reader()){//do something with the current record} 我一般都用SqlDataAdapter来把数据填充到datatable,dataset里,用sqldatareader的时候一般是前台控件绑定数据,或者传值显示数据的时候用的,这样应该比较好操作 我的意思是 这个sqldatareader已经绑定到一个listbox上了,能不能同时绑定到一个dataset,还是只能关闭dr,再写个dataadapter,绑定到ds上呢? 您可以先装入一个datatable里面,再进行绑定.这样就可以共享了. 楼主,我做了个简单的例子,你看下:前台代码:(其实也就添加了一个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里,至于代码本身的使用价值不大,一般很少这样处理数据 既然你想用DataSet,干吗要DataReader读出来呢?你直接用DataSet取数据不就行了. 数据量太大,超过10万条以上的,用dataset太消耗内存,用datareader一条一条读出来,再写插入另一个表呢?是不是也这样呢? IIS如何设置UrlRewrite伪静态首页? 问一个常识性的菜鸟问题 关于 usemap的问题 請教一個頁面的做法 如何获得~Repeater里面CheckBox控件 看到此版大家都在热议asp.net的三层架构,我也提出我疑问了好多天的问题!!希望大家讨论 VS.NET无法创建ASP.NET Web Application,怎么办???? 在ASP.NET中转向另一个网页,想将变量Str附加在地址后面。?ID=这里应如何写 还是提示框的问题? 关于web.config设置虚拟路径 sql Cast函数 asp.net中如何写出一个警告框,有“确定”和“取消”两个按钮?
然后从datareader里一个一个读,插入datatable好了
While(dr.Reader()){//do something with the current record}
还是只能关闭dr,再写个dataadapter,绑定到ds上呢?
<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里,至于代码本身的使用价值不大,一般很少这样处理数据
你直接用DataSet取数据不就行了.