学习笔记第九周

时间:2023-02-25 14:31:57

6.1数据集_数据关系

   创建树形视图(TreeView->Node节点)

SqlCommand sqlCommand = new SqlCommand();                                                    
sqlCommand.Connection
= sqlConnection;
sqlCommand.CommandText
=
"SELECT * FROM tb_Department;"
+ "SELECT * FROM tb_Major;"
+ "SELECT * FROM tb_Class;";

 

依旧是先声明并实例化SQL命令,将连接属性指向SQL连接。然后指定SQL命令的命令文本,先插入表——学院表、专业表、班级表。

DataSet dataSet =new DataSet();    
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();

 

然后声明并实例化数据集,接着填充数据集。

DataTabledepartmentTable=dataSet.Tables[0];                                                 
DataTable majorTable
= dataSet.Tables[1];
DataTable classTable
= dataSet.Tables[2];

 

声明数据表并且对应着数据集中的相应的数据表。

DataRelation[] dataRelations =                                                                  
{
new DataRelation
(
"Department_Major"
, departmentTable.Columns[
"No"]
, majorTable.Columns[
"DepartmentNo"]
,
false)
,
new DataRelation
(
"Major_Class"
, majorTable.Columns[
"No"]
, classTable.Columns[
"MajorNo"]
,
false)
};

用数组的方式来设置表与表之间的关联。取一个与表之间关系相关的名字。然后列出表相关联的两个列。最后一行的false表示不要要创建外键约束。本例题中写出了学院与专业之间的关系,专业与班级之间的关系。

 

 dataSet.Relations.AddRange(dataRelations);    

将数据关系批量添加到数据集中。

 

声明并实例化树形节点。

 List<TreeNode> treeNodes = new List<TreeNode>();   

 

这是添加第一层节点,遍历学院表中的每一行。然后声明新节点,添加。

foreach (DataRow departmentRow in departmentTable.Rows)                                         
{
TreeNode departmentNode
= new TreeNode();
departmentNode.Text
= departmentRow["Name"].ToString();
treeNodes.Add(departmentNode);

 

然后先获取“下属”行即学院表所在行的子行。

foreach (DataRow majorRow in departmentRow.GetChildRows("Department_Major"))                                {
TreeNode majorNode
= new TreeNode();
majorNode.Text
= majorRow["Name"].ToString();
departmentNode.Nodes.Add(majorNode);

 

现在添加班级这一节点。其中有一个特殊的属性Tag(标签),写入编号,有利于之后的信息载入。信息插入时要对应相应的节点。

 foreach (DataRow classRow in majorRow.GetChildRows("Major_Class"))                                          {
TreeNode classNode
= new TreeNode();
classNode.Text
= classRow["Name"].ToString();
classNode.Tag
= classRow["No"]; majorNode.Nodes.Add(classNode); } } }

 

作为进一步的改进,我们可以使用Ado.net,它是面向对象的、用可视化的方法实现连接、LINQ(语言集成查询)。

首先我们要声明:

using System Security.cryptography;

 

 

 

然后我们以登录为例:

EduBase edubase =new EduBase();

 

用哈希函数将密码加密:

MD5 CryptoServiceProvider md5 =new

Byte[] passwordBytes
=Encoding.Default.GetBytes(txb_password.text.Trim());

Byte[] passwordHashed
=md5.ComputeHash(passwordBytes);

 

然后从数据库中取数据:

Var user=(from u in eduBase.User

Where u.No
==this.txb_UserNo.Trim()&&u.password Hashed

Select u).FirstOrDefault();

 

FirstOrDefault()为取第一条记录没有则为默认值。

 

最后判断是否有数据,登录是否成功:

if (rowCount == 1)                                                            

{

MessageBox.Show(
"登录成功。");

}

else {

MessageBox.Show(
"用户号/密码有误,请重新输入!"); //

this.txb_Password.Focus();

this.txb_Password.SelectAll();

}