数据关系

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

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();                                                          

            }

        }

 

posted @ 2017-11-07 16:53  hissql  阅读(460)  评论(0)    收藏  举报