DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的。
为什么说DataSet被当成内存中的数据库呢?
主要是在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。
那DataSet到底是如何复杂的呢?
1)因为DataSet可以看做是内存中的数据库,也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable),而且每一 DataSet中的数据表(DataTable)对应一个数据源中的数据表(Table)或是数据视图(View)。
2)DataSet对象结构之所以非常复杂,主要是因为在DataSet对象的下一层中是DataTableCollection对象、 DataRelationCollection对象和ExtendedProperties对象等3个对象。
3)上文已经说过,每一个DataSet对象是由若干个DataTable对象组成。
A) DataTableCollection就是管理DataSet中的所有DataTable对象。表示DataSet中两个 DataTable对象之间的父/子关系是DataRelation对象。它使一个DataTable 中的行与另一个DataTable中的行相关联。这种关联类似于关系数据库中数据表之间的主键列和外键列之间的关联。
B) DataRelationCollection对象就是管理DataSet中所有DataTable之间的DataRelation关系的。
C) 在 DataSet中DataSet、DataTable和DataColumn都具有ExtendedProperties属性。ExtendedProperties其实是一个属性集(PropertyCollection),用以存放各种自定义数据。
三大特性
(1)独立性。DataSet独立于各种数据源。因为其断开数据源链接后仍然可以使用,而recordset确实做不到的。
(2)数据关系视图。 DataSet对象是一个可以用XML形式表示的数据视图,形成一个个的datatable,是一种数据关系视图。
实例:(三层架构)
当需要在登录窗体中自动加载数据库所有用户的账号,并放到列表框中。
UI层
private void frmLogin_Load(object sender, EventArgs e) //UI层
{
//初始化界面信息
//提取用户列表
DataSet ds = new DataSet();
Dong.BLL.OperInfo mOper = new Dong.BLL.OperInfo();
ds = mOper.GetAllList();
cbUserid.ValueMember = "Code";
cbUserid.DisplayMember = "Code";
cbUserid.DataSource = ds.Tables[0];
}
BLL层
public partial class OperInfo
{
private readonly Dong.DAL.OperInfo dal=new Dong.DAL.OperInfo();
public OperInfo()
{ }
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetAllList()
{
return GetList("");
}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
return dal.GetList(strWhere);
}
}
DAL层
public partial class OperInfo
{
public OperInfo()
{}
/// <summary>
/// 获得数据列表
/// </summary>
public DataSet GetList(string strWhere)
{
StringBuilder strSql=new StringBuilder();
strSql.Append("select Id,Code,Pwd,Name,Sex,CId,Phone,Role ");
strSql.Append(" FROM OperInfo ");
if(strWhere.Trim()!="")//2017年3月27日20:17:36研究到此
{
strSql.Append(" where "+strWhere);
}
return DbHelperOleDb.Query(strSql.ToString());
}
}
sqlHelper
public static DataSet Query(string SQLString)
{
DataSet result;
using (OleDbConnection oleDbConnection = new OleDbConnection(DbHelperOleDb.connectionString))
{
DataSet dataSet = new DataSet();
try
{
oleDbConnection.Open();
OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter(SQLString, oleDbConnection);
oleDbDataAdapter.Fill(dataSet, "ds");
}
catch (OleDbException ex)
{
throw new Exception(ex.Message);
}
result = dataSet;
}
return result;
}