使用方法
1、创建DataSet对象
DataSet ds = new DataSet();。
DataSet ds = new DataSet("DataSetName");。
2、用数据集填充DataSet。
最常用的是DataAdapter对象的Fill()方法给他填充数据。
(1)
DataSet ds = new DataSet();。
SqlDataAdapter adapt = new SqlDataAdapter(sqlcmd,con)。
adapt.Fill(ds,"mytest");。
(2)
DataSet ds=new DataSet();。
DataTable dt=new DataTable("newTable");。
ds.Tables.Add(dt);。
(3)
DataSet ds=new DataSet();。
DataTable dt=ds.Tables.Add("newTable");。
3、访问DataSet中的表、行和列 值。
(1): 访问每个 DataTable。
按表名访问:ds.Tables["mytest"] //指定DataTable对象mytest(即访问DataSet中名为mytest的DataTable)
按索引(索引基于0的)访问:ds.Tables[0] //指定DataSet中的第一个DataTable。
(2): 访问DataTable中的行。
ds.Tables["mytest"].Rows[n] //访问mytest表 的第n+1行(行的索引是从0开始的)
ds.Tables[i].Rows[n] //访问DataSet中的第i+1个DataTable 的第n+1列(列的索引是从0开始的)
(3): 访问DataTable中的某个元素。
ds.Tables["mytest"].Rows[n][m] //访问mytest表的第n+1行第m+1列的元素。
ds.Tables[i].Rows[n][m] //访问DataSet中的第i+1个DataTable 表的第n+1行第m+1列的元素。
ds.Tables["mytest"].Rows[n][name] //访问mytest表的第n+1行name列的元素。
ds.Tables[i].Rows[n][name] //访问DataSet中的第i+1个DataTable 表的第n+1行name列的元素。
(4): 取DataTable中的列名。
ds.Tables["mytest"].Columns[n] //取出mytest表的n+1列列名。
ds.Tables[i].Columns[n]。
4、实例
using System;
using System.Collections.Generic;。
using System.Text;。
using System.Data.SqlClient;。
using System.Data;。
namespace sqlconnection1。
class Program
private void SQLConnectionF(string source, string select)。
//创建连接
SqlConnection con = new SqlConnection(source);。
SqlDataAdapter adapt = new SqlDataAdapter(select,con);。
try
con.Open();
Console.WriteLine("connection is successful!");。
catch (Exception e)。
Console.WriteLine("connection error is :{0}", e.ToString());。
//创建DataSet
DataSet ds = new DataSet();。
//将数据添加到DataSet中。
adapt.Fill(ds,"mytest");。
//取出mytest表各列名
Console.WriteLine("{0,-15} {1,-10} {2,-10}",ds.Tables["mytest"].Columns[0],。
ds.Tables["mytest"].Columns[1],ds.Tables["mytest"].Columns[2]);。
//输出mytest表中第六行。
DataRow row1 = ds.Tables["mytest"].Rows[5];。
Console.WriteLine("{0,-15} {1,-10} {2,-10}",row1[0],row1[1],row1[2]);。
//输出mytest表中第五行的第二列的值。
DataRow row2 = ds.Tables["mytest"].Rows[4];。
Console.WriteLine(" {0,-25} ", row2[1]);。
//下列两种方法等效都等同于row2[1](即第五行的第二列的值)
Console.WriteLine(" {0,-25} ", ds.Tables["mytest"].Rows[4][1]);。
Console.WriteLine(" {0,-25} ", ds.Tables["mytest"].Rows[4]["number"]);。
//输出DataSet中的所有数据。
foreach (DataRow row in ds.Tables["mytest"].Rows)。
Console.WriteLine("{0,-15} {1,-10} {2,-10} {3}",row["name"] ,。
row["number"] , row["low"] , row["high"]);。
//取第三列的值
Console.WriteLine("{0,-15} ", row[3]);。
Console.ReadLine();。
con.Close();
static void Main(string[] args)。
string sou = "server=duanyf\\SQLEXPRESS;" + "Initial Catalog=master;" + "UID = sa;" + "Password = dyf123";。
string sel = "SELECT name,number,low,high From dbo.spt_values";。
Program sqlcon = new Program();。
sqlcon.SQLConnectionF(sou, sel);。
定义DataSet架构的四种方法:
1.直接使用DataSet API来创建DataTable ,DataColumn,DataRelation。
部分实例代码: //方法一:使用DataSet API。
DataSet ds = new DataSet();。
DataTable stu_tb = new DataTable(“Student“);。
ds.Tables.Add(stu_tb);。
ds.Tables[0].Columns.Add(“stuID“, typeof(int));。
ds.Tables[0].Columns.Add(“stuName“, typeof(string));。
ds.Tables[0].Columns.Add(“stuNum“,typeof (string));。
/*---创建另一个具体信息表---- */。
ds.Tables.Add(“StuInfo“);。
ds.Tables[1].Columns.Add(“stuNum“,typeof (string ));。
ds.Tables[1].Columns.Add(“phone“,typeof (string ));。
ds.Tables[1].Columns.Add(“address“,typeof (string));。
ds.Tables[1].Columns.Add(“Major“,typeof (string ));。
/*---两表建立关联---*/。
ds.Relations.Add(ds.Tables[0].Columns[“stuNum“], ds.Tables[1].Columns[“stuNum“]);。
2.通过一个DataAdapter类,使用数据库元数据来推断出架构。
部分实例代码:
DataSet ds;
SqlDataAdapter sdr=new SqlDataA。
1.DataSet 是DataTable的集合,通过dataSet1.Tables[index] 方式得到DataTable。
2.DataSet 及DataTable均存在与内存。
3.DataSet中的DataTable可以只有一个,也可以有多个,多个之间可以有关系也可以没有关系相互独立;
4.DataTable可以通过dataSet1.Tables.Add加入到DataSet中,但此DataTable必须通过copy的方式加入,如:
DataTable dt1=new DataTable();。
DataSet ds=new DataSet();。
ds.Tables.Add(dt1);//错误。
ds.Tables.Add(dt1.Copy());//正确。
5.SqlDataAdapter可以填充DataSet也可以填充DataTable,根据实际需要,如sql查询的是返回多个记录集则用DataSet,单个记录集用DataSet和DataTable均可,只是通过dataSet1.Tables[0]转DataTable。
6.DataTable可以设置pk,DataSet中的Table可以设置relation。
在表中列和行的添加和删除
本节主要介绍DataColumn对象和DataRow对象,通过它们来说明在表中列与行的添加和删除。它们均不能单独存在,而是作为DataTable集合的两个元素存在。下面通过代码进行说明。
DataTable dt = new DataTable("t1");DataColumn dc = new DataColumn();dc.DataType = System.Type.GetType("System.String");dc.ColumnName = "Name";dt.Columns.Add(dc);DataRow dr; dr= dt.NewRow();dr["Name"] = "weiyi";dt.Rows.Add(dr);dr = dt.NewRow();dr["Name"] = "lirong";dt.Rows.Add(dr);dt.Rows.RemoveAt(0);dt.Columns.RemoveAt(0); 。
以上代码主要实现为创建完毕的DataTable添加一个“Name”列,并为该列的前两行分别添加元素。
代码解释如下所述。
首先是创建DataTable对象。
DataTable dt = new DataTable("t1");。
然后创建DataColumn对象,并设置列名和列的类型,接着将列添加到DataTable中,如下所示。
DataColumn dc = new DataColumn(); //创建列对象dc.DataType = System.Type.GetType("System.String"); //设置列的类型dc.ColumnName = "Name"; //设置列名 dt.Columns.Add(dc); //将列添加到DataTable中 。
创建完列后,应该为列进行赋值,这时需要用到DataRow对象,如下所示。
DataRow dr = dt.NewRow();。
这里NewRow()表示表的新行,然后分别添加了两个行元素,最后还应该将新添加的行添加到DataTable中,如下所示。
dr["Name"] = "weiyi";dt.Rows.Add(dr);dr = dt.NewRow();dr["Name"] = "lirong";dt.Rows.Add(dr); 。
行与列的删除和DataTable一样,同样支持三种方法,如下所示。
dt.Rows.Clear(); //删除所有行dt.Rows.RemoveAt(0); //删除第一行 dt.Rows.Remove(row); //删除指定行dt.Columns.Clear(); //删除所有列 dt.Columns.RemoveAt(0); //删除第一列dt.Columns.Remove(column); //删除指定列。
如何对dataset做一下过滤操作?
我查询出来的有一列datacode 。
会有:
20060205
2006-5-6
2006/5/6
这样的数据,我想在绑定之前在dataset里面把日期大于某个日期的数值去掉,请问怎么写阿?
------解决方案--------------------。
查询的时候在命令里处理啊
填充DATASET之前
------解决方案--------------------。
用DataTable的Select 。
------解决方案--------------------。
DataView dataView = new DataView( 你DataSet里的表(如:dataset.Table[0]) ); 。
dataView .RowFilter = String.Format( 过滤条件 (如: "datediff(d,datacode,getdate()) ")); 。
GridView1.DataSource = dataView ; 。
GridView1.DataBind( ); 。
没测试,只可参考!!
------解决方案--------------------。
根据你的情况决定是否使用String.Format()方法 。
------解决方案--------------------。
有一个概念你要澄清,你要进行过滤的是DataTable,而并非DataSet 。
dt是原DataTable
where是查询字符串
order是排序字符串
DataRow[] drs=dt.Select(where,order); 。
DataTable dt2=dt.Copy(); 。
dt2.Rows.Clear(); 。
foreach(DataRow row in drs) 。
{
DataRow row2=dt2.NewRow(); 。
for(int i=0;i <row2.Table.Columns.Count;i++) 。
row2[i]=row[i]; 。
dt2.Rows.Add(row2); 。
}
return dt2;
------解决方案--------------------。
用DataView .RowFilter( "条件 "); 。
------解决方案--------------------。
DataTable dt = dSet.Table[0]; //dSet你的数据集 。
string myDate = "2006-08-11 "; 。
DataRow[] dRows = dt.Select( " datacode < "+myDate); 。
DataTable dtNew = dt.Copy(); 。
foreach(DataRow dr in dRows) 。
{
dtNew.Rows.Add(dr); 。
}
dSet = new DataSet(); 。
dSet.Table.Add(dtNew); 。
//数据绑定.dSet
------解决方案--------------------。
dataview就行,上面有例子 。
------解决方案--------------------。
查询之前就过滤掉不好么?
------解决方案--------------------。
为啥不在查询 之前过滤呀
------解决方案--------------------。
先在datatable里面把日期格式转换成标准格式 。
例如2006/5/6用split拆分,用0填充,然后组成20060506 。
然后用上面的filter过滤就好 。
------解决方案--------------------。
使用dataView 的过滤功能 。
------解决方案--------------------。
DataView rowfilter 。
DataView dv = DataSet.Tables[0].DefaultView。