当前位置:编程学习 > C#/ASP.NET >>

如何返回数据集合

数据库中有如下两表
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;
} --------------------编程问答--------------------
引用 8 楼 zzxap 的回复:
select 学生表.*,班级表.classname from 学生表 
left join 班级表 
on 学生表.classid=班级表.classid 

执行这个语句,把数据填充到dataset 


然后dataset.tablea[0].rows[i][j] 就可以读取里面的数了

up --------------------编程问答-------------------- 我是提问者,感觉大家回答的还是没有答到点子上.

如:

初一班包括学生张三,李四
实二天包括学生王五,刘六

查询表中的数据,把查询出来的数据填充到对象LoadData.
LoadData中的数据形式为

01
初一
   |
   张三
   李四

02
初二
   |
   王五
    刘六 --------------------编程问答-------------------- 如果用DataSet,如何组织成:

class LoadData 

    string classid; 
    string classname; 
    student[] list; 

--------------------编程问答-------------------- 是不是非得用DataSet.Table[0].select方法才能达到我的要求?

谁能给一个比较好的实现方式? --------------------编程问答--------------------
引用 7 楼 Sandy945 的回复:
先搜搜orm 了解一下 

推荐nhibernate 
--------------------编程问答-------------------- 01 
初一 
  | 
  张三 
  李四 

02 
初二 
  | 
  王五 
    刘六

你想得真美

用嵌套repeater吧

<%@ 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();
            }
        }
    }
}
--------------------编程问答-------------------- 也可以用泛型加载树 --------------------编程问答-------------------- 循环查询出的学生表,添加到student[]就行了
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,