一 、DataSet判断是否为空
1,if(ds == null) 这是判断内存中的数据集是否为空,说明DATASET为空,行和列都不存在!!
2,if(ds.Tables[0].Count == 0) 这应该是在内存中存在一个DATASET,但是,数据集中不存在表!!
3,if(ds.Tables[0].Count == 1 && ds.Tables[0].Rows.Count == 0) 说明存在表table,但是,表内没有数据!
if ( yourDataSet.Tables[0].Rows.Count > 0 )
{
有记录时你要做的事情
}
else
{
返回空集
}
if (DataSet1.Tables[0].Rows.Count 0)
{
Response.Write(“”);
}
建议(yourDataSet.Tables[0].Rows.Count > 0) OR (ds.tablesnull) 应该先判断是否数据集为空(查询出错时),接着判断表中的行数是否为零(查询未出错且行数是否为零),否则容易出错,
例如:先判断myDataSet.Tables[0].Rows.Count==0时,如果查询出错时,此时myDataSet为null,也就没有table,所以会报错。
故应该这样判断
if (myDataSet == null || myDataSet.Tables[0].Rows.Count == 0)
{
//为空时进行处理
}
else
{
//不为空时处理
}
“||”(or)和“&&”(and)操作符先判断第一个条件,不满足后接着判断下一条件,但如果上面顺序调换在myDataSet为null时则会出错,即先判断大的条件,接着判断小的条件
二 、DataSet的遍历
//多表多行多列的情况
foreach (DataTable dt in YourDataset.Tables) //遍历所有的datatable
{
foreach (DataRow dr in dt.Rows) ///遍历所有的行
foreach (DataColumn dc in dt.Columns) //遍历所有的列
Console.WriteLine(“{0}, {1}, {2}”, dt.TableName, dc.ColumnName, dr[dc]); //表名,列名,单元,数据
}
//遍历一个表多行多列
foreach(DataRow mDr in dataSet.Tables[0].Rows )
{
foreach(DataColumn mDc in dataSet.Tables[0].Columns)
{
Console.WriteLine(mDr[mDc].ToString());
}
}
//遍历一个表多行一列
foreach(DataRow row in DataSet1.Tables[0].Rows)
{
Console.WriteLine(row[0].ToString());
}
//一行一列
ds.Tables[0].Rows[0]["字段"]
//访问一行中的某个元素
dr.ItemArray[i].ToString()
三、DataSet 的筛选
使用 Select
// DataTable.Select(条件[和Db的Sql筛选基本相似])
DataTable dt = new DataTable();
DataRow[] drArr = dt.Select(" C1=’abc’ "); //查询
//DataTable.Select( "ID=" + id )
//多条件,如:DataTable.Select("ID=" + id +" and name=" +name)
模糊筛选
DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");
// 另一种模糊查询的方法
DataRow[] drArr = dt.Select("’abc’ LIKE C1 + ’%’", "C2 DESC");
// 筛选后并排序
DataRow[] drArr = dt.Select("C1=’abc’", "C2 DESC");
// DataRow如何转为DataTable呢?
// 思路:DataRow赋值给新的DataTable
DataTable dtNew = dt.Clone();
for (int i = 0; i < drArr.Length; i++)
{
dtNew.ImportRow(drArr[i]);
}
利用DataView的RowFilter 实现筛选
DataTable dataSource = new DataTable();
DataView dv = dataSource.DefaultView;
dv.RowFilter = "columnA = 'abc'";
//1.过滤后直接获取DataTable
DataTable newTable1 = dv.ToTable();
//2.设置新DataTable的TableName
DataTable newTable2 = dv.ToTable("NewTableName");
//3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序
//即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。
DataTable newTable3 =
dv.ToTable(true, new string[] { "columnA,columnF,columnC" });
//4.综合了2.3两点。
DataTable newTable4 =
dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });