如何返回数据集合
数据库中有如下两表1)班级表(classid,classname)
2)学生表(studentid,studentname,classid)
asp.net中定义了一个对象LoadData
class LoadData
{
string classid;
string classname;
student[] list;
}
要求:查询所有班级信息以及班级中包括的学生信息.
我的做法为:
1)建立班级--学生视图(根据classid),视图名称为:cls_student
2)采用sqldatareader读取视图cls_student中的数据.
问题:为了给对象LoadData赋值,感觉其中要作很多转化,大家有什么高明的做么? 要少查数据库. --------------------编程问答-------------------- 什么叫“要少查数据库”?
一條sql返回dataset,與class建立mapping關系。。。 --------------------编程问答-------------------- 不知道你想干嘛 --------------------编程问答-------------------- 感覺怎么也得兩個class~~
一個class對應一個table~ --------------------编程问答-------------------- 结果集要么Dataset。要么Dataread就这两个啊。绑定就好了啊。
--------------------编程问答--------------------
select 学生表.*,班级表.classname from 学生表
left join 班级表
on 学生表.classid=班级表.classid
定义个和这个结构对应的model就好了 --------------------编程问答-------------------- LS正解 要搞得这么复杂吗 还用视图? --------------------编程问答-------------------- 先搜搜orm 了解一下
推荐nhibernate --------------------编程问答-------------------- select 学生表.*,班级表.classname from 学生表
left join 班级表
on 学生表.classid=班级表.classid
执行这个语句,把数据填充到dataset
然后dataset.tablea[0].rows[i][j] 就可以读取里面的数了 --------------------编程问答-------------------- http://www.cnblogs.com/jyk/archive/2008/09/05/1284798.html#1308882 --------------------编程问答-------------------- public DataSet GetStuInfo()
{
SqlConnection conn=new SqlConnection("....");
string sqlStr="select 学生表.*,班级表.classname from 学生表 left join 班级表 on 学生表.classid=班级表.classid";
SqlDaraAdapter sda=new SqlDaraAdapter(sqlStr,conn)
DataSet ds=new DataSet();
sda.Fill(ds,"stu");
return ds;
} --------------------编程问答--------------------
up --------------------编程问答-------------------- 我是提问者,感觉大家回答的还是没有答到点子上.
如:
初一班包括学生张三,李四
实二天包括学生王五,刘六
查询表中的数据,把查询出来的数据填充到对象LoadData.
LoadData中的数据形式为
01
初一
|
张三
李四
02
初二
|
王五
刘六 --------------------编程问答-------------------- 如果用DataSet,如何组织成:
class LoadData
{
string classid;
string classname;
student[] list;
}
--------------------编程问答-------------------- 是不是非得用DataSet.Table[0].select方法才能达到我的要求?
谁能给一个比较好的实现方式? --------------------编程问答-------------------- --------------------编程问答-------------------- 01
初一
|
张三
李四
02
初二
|
王五
刘六
你想得真美
用嵌套repeater吧
--------------------编程问答-------------------- 也可以用泛型加载树 --------------------编程问答-------------------- 循环查询出的学生表,添加到student[]就行了
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<!-- 父Repeater开始 -->
<asp:Repeater id="Repeater1" runat="server">
<itemtemplate>
<b>
<br>
CustomerID:
<%#Eval("CustomerID") %>
</b>
<!-- 子Repeater开始 -->
<asp:repeater id="childRepeater" runat="server"
datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("CustOrder") %>'>
<itemtemplate>
<%#Eval("[\"ORDERID\"]")%>
<%--如果不是这样写的话,可能会出现DataBinding:“System.Data.DataRow”不包含名为“ORDERID”的属性--%>
<br>
</itemtemplate>
</asp:repeater>
<hr>
<!-- 子Repeater结束 -->
</itemtemplate>
</asp:Repeater>
<!-- 父Repeater结束 -->
</FONT>
</form>
</body>
</HTML>
cs页面代码:
Code
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
namespace HibernateTest
{
/**//// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater Repeater1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
this.GetData();
}
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void GetData()
{
SqlConnection con = new SqlConnection("server=(local);database=Northwind;uid=sa;pwd=;");
System.Data.SqlClient.SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customers",con);
System.Data.SqlClient.SqlDataAdapter da1 =new SqlDataAdapter("SELECT * FROM ORDERS",con);
DataSet ds= new DataSet();
try
{
con.Open();
//将主表Customer添加到DataSet中
da.Fill(ds,"Customers");
//将子表Orders添加到DataSet中
da1.Fill(ds,"Orders");
//添加表Customer和表Orders之间的关系CustOrder;关联字段CustomerID
ds.Relations.Add("CustOrder",ds.Tables["Customers"].Columns["CustomerID"],ds.Tables["Orders"].Columns["CustomerID"]);
this.Repeater1.DataSource = ds;
this.Repeater1.DataBind();
}
catch(Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
}
}
}
补充:.NET技术 , ASP.NET