标签:size 理由 开发 ext 表名 lib and level ati
一、知识点描述
1、DataSet、DataTable、DataRow之间有什么关系?
DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable。DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面。DataRow表示DataTable中包含的实际数据,我们可以通过DataRow将数据添加到用DataColumn定义好DataTable中。
2、dataset的特性
(1).独立性。DataSet独立于各种数据源。微软公司在推出DataSet时就考虑到各种数据源的多样性、复杂性。在.Net中,无论什么类型数据源,它都会提供一致的关系编程模型,而这就是DataSet。
(2).离线(断开)和连接。DataSet既可以以离线方式,也可以以实时连接来操作数据库中的数据。这一点有点像ADO中的RecordSet。
(3).DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。
3、dataset的使用方法
(1).创建DataSet对象
DataSet ds = new DataSet();
DataSet ds = new DataSet("DataSetName");
(2).用数据集填充DataSet
最常用的是DataAdapter对象的Fill()方法给他填充数据
①DataSet ds = new DataSet();
SqlDataAdapter adapt = new SqlDataAdapter(sqlcmd,con)
adapt.Fill(ds,"mytest");
②DataSet ds=new DataSet();
DataTable dt=new DataTable("newTable");
ds.Tables.Add(dt);
③DataSet ds=new DataSet();
DataTable dt=ds.Tables.Add("newTable");
(3).访问DataSet中的表、行和列 值
①: 访问每个 DataTable
按表名访问:ds.Tables["mytest"] //指定DataTable对象mytest(即访问DataSet中名为mytest的DataTable)
按索引(索引基于0的)访问:ds.Tables[0] //指定DataSet中的第一个DataTable
②: 访问DataTable中的行
ds.Tables["mytest"].Rows[n] //访问mytest表 的第n+1行(行的索引是从0开始的)
ds.Tables[i].Rows[n] //访问DataSet中的第i+1个DataTable 的第n+1列(列的索引是从0开始的)
③: 访问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列的元素
④: 取DataTable中的列名
ds.Tables["mytest"].Columns[n] //取出mytest表的n+1列列名
ds.Tables[i].Columns[n]
4、什么地方使用Dataset?
(1)、桌面应用程序中使用,利用客户端的处理能力 (2)、不同的应用平台之间传输远程数据,比如利用web service传输Dataset
(3)、需要数据缓存(DataReader是保持数据连接的对象) 其他缓存办法:使用DataReader从数据库中取出数据,循环保存进一个Arraylist,每条数据保存在一个实体类里面,每个字段的数据对应了此类的相应属性。所有这些实体类对象一起构成了数组Arraylist。——这种方法的好处:不仅更有效率,而且更加易于保持,降低和数据库之间的耦合;当然,此数据集合也可以方便的绑定到控件中 (4)、需要自由的获得关系数据的时候,比如主从表。与其每次都从数据库中取相应父栏目下的所有子数据,不如一次性全部取出子数据,然后根据table表之间的关系relation绑定到控件。
5、使用Dataset的若干理由
(1)、某些场合使用它开发更加方便 (2)、有时候可以让web客户端像桌面客户端
二、思维导图
三、示例代码
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=Edubase2018;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = //指定SQL命令的命令文本;
"SELECT * FROM tb_room;"
+ "SELECT * FROM tb_class;";
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
DataSet dataSet = new DataSet(); //声明并实例化数据集,用于保存查得的多张表;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(dataSet); //SQL数据适配器读取数据,并填充数据集;
sqlConnection.Close(); //关闭SQL连接;
DataTable roomTable = dataSet.Tables[0]; //声明专业数据表,对应数据集的表集合中的第1张数据表;
DataTable classTable = dataSet.Tables[1]; //声明班级数据表,对应数据集的表集合中的第2张数据表;
DataRelation[] dataRelations = //声明数据关系数组;
{
new DataRelation //实例化数据关系,实现科室表、年级表之间的层次关系;
("room_class" //数据关系名称;
, roomTable.Columns["R_no"] //父表的被参照列为专业表的编号列;
, classTable.Columns["R_no"] //子表的参照列为班级表的专业编号列;
, false) //不创建约束(父列上的唯一约束、子列上的外键约束);
};
dataSet.Relations.AddRange(dataRelations); //将数据关系数组批量加入数据集的关系集合中;
this.trv_room.Nodes.Clear(); //树形视图的节点集合清空;
foreach (DataRow roomRow in roomTable.Rows) //遍历院系数据表中的每一数据行;
{
TreeNode roomNode = new TreeNode(); //声明并实例化院系节点,该节点对应当前某个院系;
roomNode.Text = roomRow["R_name"].ToString(); //院系节点的文本设为当前科室的名称;
this.trv_room.Nodes.Add(roomNode); //将院系节点加入树形视图的(根)节点集合;
//专业节点加入当前院系节点的节点集合,成为第1级节点之一;
foreach (DataRow classRow in roomRow.GetChildRows("room_class")) //借助先前定义的数据关系,遍历当前科室所在数据行的子行,即下属所有年级;
{
TreeNode classNode = new TreeNode(); //声明并实例化班级节点,该节点对应当前某个年级;
classNode.Text = classRow["Name"].ToString(); //班级节点的文本设为当前年级的名称;
classNode.Tag = classRow["No"]; //班级节点的标签设为当前年级的编号;
roomNode.Nodes.Add(classNode); //班级节点加入当前科室节点的节点集合,成为第2级节点之一;
}
}
if (this.trv_room.SelectedNode.Level == 1) //若树形视图的选中节点的级别为2,即选中年级节点;
{
int c_no = (int)this.trv_room.SelectedNode.Tag; //将树形视图的选中节点的标签转为整型,即可获得事先保存的科室编号;
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=Edubase2018;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = "SELECT No,Name FROM tb_nurse WHERE C_no=@C_no;"; //指定SQL命令的命令文本;该命令查询当前选中年级的所有护士名单,以用作数据网格视图数据源;
sqlCommand.Parameters.AddWithValue("@C_no", c_no); //向SQL命令的参数集合添加参数的名称、值;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
DataTable studentTable = new DataTable(); //声明并实例化数据表,用于保存当前选中班级的所有护士名单,以用作数据网格视图的数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(studentTable); //SQL数据适配器读取数据,并填充护士数据表;
sqlConnection.Close(); //关闭SQL连接;
this.dgv_nurse.DataSource = studentTable; //设置数据网格视图的数据源;
this.dgv_nurse.Columns["No"].HeaderText = "编号"; //将数据网格视图的指定列的表头文本设为中文;
this.dgv_nurse.Columns["Name"].HeaderText = "姓名";
this.dgv_nurse.Columns[this.dgv_nurse.Columns.Count - 1].AutoSizeMode = //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
DataGridViewAutoSizeColumnMode.Fill;
}
四、效果截图
标签:size 理由 开发 ext 表名 lib and level ati
原文地址:https://www.cnblogs.com/13950784855xu/p/9994287.html