第九周学习笔记

时间:2023-02-25 14:36:38

一、数据关系:树形视图效果

1

sqlCommand.CommandText =                                                                       

"SELECT * FROM tb_keshi;"

+ "SELECT * FROM tb_class;";

 

    

注释;1、此处技巧是只创建一个CommandText,实现一次性查询,减少后台运作的负担。

2、DataSet dataSet = new DataSet();                                                                注释:1、声明并实例化数据集,用于保存查得的多张表;此处DateSet是数据集,其功能可以一次性装很多表。

           

 3DataTable keshiTable = dataSet.Tables[0];                                                 

    DataTable classTable = dataSet.Tables[1];                                                      

注释:1、声明科室数据表,对应数据集的表集合中的第1张数据表;声明分类数据表,对应数据集的表集合中的第2张数据表;

 

4

DataRelation[] dataRelations =                                                                  

{

new DataRelation

, keshiTable.Columns["No"]

,classTable.Columns["keshitNo"]

, false)

};

dataSet.Relations.AddRange(dataRelations);

 

    注释:1、此处声明数据关系数组,并且实例化数据关系,实现科室表、分类表之间的层次关系

           2、AddRange实现批量添加。

二、ADO.NET组件

2.1利用ADO.NET可以直接操纵数据库。

2.2简介ADO.NET

ADO.NET包括五个核心组件:

  1. Connection 建立与特定数据库的连接。
  2. Command对数据源执行命令。
  3. DataReader从数据源中读取只进且只读的数据流。
  4. DataAdapter用数据填充Dataset并进行解析更新。
  5. DataSet ADO.NET的核心组件,用于断开的数据操作,包含数据表、约束、关系等对象,相当于存储于内存中的小的数据库。

2.3应用举例:注册

原代码:

private void btn_Login_Click(object sender, EventArgs e)

{

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=EduBaseDemo;Integrated Security=sspi";

SqlCommand sqlCommand = sqlConnection.CreateCommand();

sqlCommand.CommandText =

"SELECT COUNT(1) FROM tb_User WHERE No=@No AND Password=HASHBYTES('MD5',@Password);"; #region SQL参数用法1

SqlParameter sqlParameter =

sqlCommand.Parameters.AddWithValue("@No", this.txb_UserNo.Text.Trim()); sqlParameter.SqlDbType = SqlDbType.Char;

sqlParameter.Size = 10;

#endregion

#region SQL参数用法2

sqlCommand.Parameters.AddWithValue("@Password", this.txb_Password.Text.Trim());

sqlCommand.Parameters["@Password"].SqlDbType = SqlDbType.VarChar;

#endregion

sqlConnection.Open(); int rowCount = (int)sqlCommand.ExecuteScalar();

sqlConnection.Close();

if (rowCount == 1) {

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

else {

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

this.txb_Password.SelectAll();

 

 

改进方法:

  1. 需先选定项目à添加à新建项à选择ADO.NETà设置好相关内容

注释:即不需再用适配器和Connection 建立与特定数据库的连接,因为ADO.NET的五个核心组件就包括了这些功能。

2.改进后的代码

private void btn_Login_Click(object sender, EventArgs e)

{

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] passwordBytes = Encoding.Default.GetBytes(txb_Password .Text .Trim ());

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



EduBaseDemo edubase=new EduBaseDemo ();

var user=(from us in edubase.User

where us.No ==this.txb_UserNo .Text .Trim () && us.Password ==passwordHashed

select us).FirstOrDefault ();



if (user!=null)

{

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

}

else

{

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

this.txb_Password.Focus();

this.txb_Password.SelectAll();

}

}