C#中关于dataset用法的问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:06:30
DataSet ds;
ds = new DataSet();
sqlConnection1.Open();
string sql=(省略了……);
SqlDataAdapter adp = new SqlDataAdapter(sql, sqlConnection1);
ds.Clear();
adp.Fill(...);!!!!!!!!!!!!!!(问题所在,详情见下)

想实现的功能:sql语句查询数据库,两张表做笛卡尔积,选定一些列在datagridview中显示出来。
目前的问题:Fill()的两个参数为dataset和string srcTable,如果是单一表源,就可以为adp.Fill(ds,"student");但是现在涉及到笛卡尔积,我就不知道怎么写了……
有人说可以写一个函数,返回一个dataTable对象,作为Fill()的参数,但是我不知道怎么写,还请给位达人们知道,不胜感激!

Fill()的两个参数为dataset和string srcTable,如果是单一表源,就可以为adp.Fill(ds,"student");但是现在涉及到笛卡尔积,我就不知道怎么写了……

解答:adp.Fill(ds,"student");后面的"student"是SQL执行后形成虚拟表的名称.跟你的笛卡尔积没有关系.这个地方还是这么写就可以了.当然可以换个名字.
笛卡尔积是通过cross join查询出来的.虽然是2张表的查询.但是最后SQL返回的结果笛卡尔积是一张虚拟表.
比如table1和table2 进行了cross join查询.形成了笛卡尔积.这个笛卡尔积其实是table3了.是个虚拟表.adp.Fill的时候.其实是把table3放到了dataset中.后面你取名字也是取这个table3的名字.这个跟单表和多表没有关系的.还是这么写.

笛卡尔积应该是你SQL语句中进行处理的吧,然后得到一些数据;
这里的adp.Fill(ds, "你想给显示数据表取的名字");
然后你可以在GridView数据绑定的时候使用它来处理:

GridView1.DataSource = ds.Tables[0].defaultView;
//GridView1.DataSource = ds.Tables["你想给显示数据表取的名字"].defaultView;
GridView1.DataBind();
========================================================
说明:
adp.Fill(ds);这里可以添加第二个参数,也可以不添加;
不添加的话,就用数字索引;
如:
DataTable dt = ds.Tables[0];
如果添加第二个参数,就可以使用参数来索引,如下:
DataTable dt = ds.Tables["你添加的参数"];

可以对sql语句处理