心得体会——数据库命令的应用

数据库命令的应用

   根据上一次做的学习心得,我们已经了解如何完成成功的登录与注册的过程,以及当用户登录或注册时不恰当的操作,后台管理可以给予相关的提示。

  这一次我们主要学习的是命令——存储(将命令文本中的内容改为存储过程的名称,简化相关操作,减少错误。)。以及面向对象——类(使用“类”这一功能,将相关操作分类,使得更为明晰,容易修改。)

 

2.5 命令——存储

 

在注册控件下的代码:

 

if (this.txb_UserNo.Text.Trim() == "")                 //若用户号文本框为空;

            {

                MessageBox.Show("用户号不能为空!");       //给出错误提示;

                this.txb_UserNo.Focus();                   //用户号文本框获得焦点;

                return;                                    //返回;

            }

            if (this.txb_Password.Text.Trim() == "")       //若密码文本框为空;

            {

                MessageBox.Show("密码不能为空!");         //给出错误提示;

                this.txb_Password.Focus();                 //密码文本框获得焦点;

                return;                                    //返回;

            }

            SqlConnection sqlConnection = new SqlConnection();  //声明并实例化SQL连接;

            sqlConnection.ConnectionString =

                "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                         //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);

            SqlCommand sqlCommand = sqlConnection.CreateCommand();                                      //调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;

            sqlCommand.CommandText = "usp_insertUser";                                                  //指定SQL命令的命令文本;命令文本为存储过程名称; 

            sqlCommand.CommandType = CommandType.StoredProcedure;                                       //SQL命令的类型设为存储过程;

            sqlCommand.Parameters.AddWithValue("@No", this.txb_UserNo.Text.Trim());                     //向SQL命令的参数集合添加参数的名称、值;

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

            sqlConnection.Open();                      //打开SQL连接;

            int rowAffected = 0;                       //声明整型变量,用于保存受影响行数;

            try                                        //尝试;

            {

                rowAffected = sqlCommand.ExecuteNonQuery();                                             //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;

            }

            catch (SqlException sqlEx)                  //捕捉SQL异常;

            {

                if (sqlEx.Number == 2627)                                                               //若SQL异常编号为2627,则违反主键/唯一约束,即插入重复值;

                {

                    MessageBox.Show("您注册的用户号已存在,请重新输入!\n");                            //给出错误提示;

                }

            }

            sqlConnection.Close();                      //关闭SQL连接;

            if (rowAffected == 1)                       //若成功写入1行记录;

            {

                MessageBox.Show("注册成功。");           //显示正确提示;

            }

            else                                          //否则;

            {

                MessageBox.Show("注册失败!");            //显示错误提示;

            }

 

以上为注册的代码,但是我们根据上一次的代码做了一些修改(以上红色加粗部分)。

 

sqlCommand.CommandText = "usp_insertUser";                                                  //指定SQL命令的命令文本;命令文本为存储过程名称; 

 

此书写更为简洁,容易修改。

但我们要在数据库中编写相关代码:

 

--创建存储过程;

----插入用户;

GO

CREATE PROCEDURE usp_insertUser

(@No VARCHAR(10)

,@Password VARCHAR(20))

AS

BEGIN

INSERT tb_User

(No,Password)

VALUES

(@No

,HASHBYTES('MD5',@Password));

END

 

相较于上次的代码:

 

sqlCommand.CommandText =

        "INSERT tb_User (No,Password) VALUES(@No,HASHBYTES('MD5',@Password));";   

 

新的改进的改进方法更加不易出错。    

 

  3.1 面向对象——类

 

此次例子主要是使登录的代码分类,使得更容易理解。

在登录控件下的代码:

 

this.User.No = this.txb_UserNo.Text.Trim();                                 

//将文本框的文本清除首尾的空格后,赋予用户的相应属性;

            this.User.Password = this.txb_Password.Text.Trim();

            this.User.LogIn();                                                             //调用用户的方法登录,并将各文本框的文本作为参数;

            MessageBox.Show(this.User.Message);                                             //在消息框中显示登录消息;

            if (!this.User.HasLoggedIn)                                                    //若用户未完成登录,即登录失败;

            {

                this.txb_Password.Focus();                                                 //密码文本框获得焦点;

                this.txb_Password.SelectAll();                                             //密码文本框内所有文本被选中;

            }

 

我们仅需用这简短的代码就可以完成登录的过程,但是我们还需要编写相关类的代码。

因为引用SQL数据库操作类,一般在进行数据库操作的时候会引入命名空间。所以在编写类的时候,我们需要在页面上方写下如下代码:

 

using System.Data;                                                                                      //包含各类数据对象;

using System.Data.SqlClient;                                                                            //包含访问SQL Server所需的各类对象;

using System.Configuration;                                                                             //包含访问配置文件所需的配置管理器;需事先在本项目的“引用”中添加对System.Configuration的引用;

 

这个时候我们可以编写相关类:

public class User

    {

        /// 公有属性:用户号;

        public string No

        {

            get;

            set;

        }

        /// 公有属性:密码;

        public string Password

        {

            get;

            set;

        }

 

         /// 公有属性:是否完成登录;

        public bool HasLoggedIn

        {

            get;

            set;

        }

        /// 公有属性:消息;

        /// (用于返回验证结果)

        public string Message

        {

            get;

            set;

        }

        /// 公有方法:登录;

        public void LogIn()

        {

            SqlConnection sqlConnection = new SqlConnection();                                          //声明并实例化SQL连接;

            sqlConnection.ConnectionString =

                ConfigurationManager.ConnectionStrings["Sql"].ToString();                               //配置管理器从App.config读取连接字符串;

            SqlCommand sqlCommand = sqlConnection.CreateCommand();                                      //调用SQL连接的方法CreateCommand来创建SQL命令;该命令将绑定SQL连接;

            sqlCommand.CommandText = "usp_selectUserCount";                                             //指定SQL命令的命令文本;命令文本为存储过程名称;(运用到了2.5的知识。)

            sqlCommand.CommandType = CommandType.StoredProcedure;                                       //SQL命令的类型设为存储过程;

            sqlCommand.Parameters.AddWithValue("@No", this.No);                                         //向SQL命令的参数集合添加参数的名称、值;

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

            sqlConnection.Open();                                                                       //打开SQL连接;

            int rowCount = (int)sqlCommand.ExecuteScalar();                                             //调用SQL命令的方法ExecuteScalar来执行命令,并接受单个结果(即标量);

            sqlConnection.Close();                                                                      //关闭SQL连接;

            if (rowCount == 1)                                                                          //若查得所输用户号相应的1行记录;

            {

                this.HasLoggedIn = true;                                                                //完成登录;

                this.Message = "登录成功。";                                                            //给出正确提示;

            }

            else                                                                                        //否则;

            {

                this.HasLoggedIn = false;                                                               //未完成登录;

                this.Message = "用户号/密码有误,请重新输入!";                                         //给出错误提示;

            }

        }

        }

这样编写,我们更容易修改,在控件下的代码也更为简洁。

 

posted @ 2017-09-27 19:56  我是墩儿  阅读(298)  评论(0)    收藏  举报