学习笔记——数据库命令对象的应用

1、            数据库建表如何加密:采用哈希函数散列的方式将密码进行加密,此过程不可逆.

插入数据:

--创建表;

----用户表;

CREATE TABLE tb_User

   (No

      CHAR(10)

      NOT NULL

      PRIMARY KEY

   ,Password

      VARBINARY(128)

      NOT NULL);

INSERT tb_User

   (No,Password)

   VALUES

('3140707001',HASHBYTES('MD5','7001'));

用户登录密码时也将密码进行散列,判断密码是否输入正确

2、 2.1——2.4实现命令(拼接方法)------登录

【代码】

设置连接:

            SqlConnection sqlConnection = new SqlConnection();     

            sqlConnection.ConnectionString =

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

            SqlCommand sqlCommand = new SqlCommand();     

            sqlCommand.Connection = sqlConnection;

读取写入的账号密码:

            sqlCommand.CommandText =       //指定SQL命令的命令文本;命令文本由字符串拼接而成;

                "SELECT COUNT(1) FROM tb_User"

                + " WHERE No='" + this.txb_UserNo.Text.Trim() + "'"   //将文本框的文本清除首尾的空格后,拼接至命令文本中;

                + " AND Password=HASHBYTES('MD5','" + this.txb_Password.Text.Trim() + "');";           

          

 

 sqlConnection.Open();    

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

                                                                                            //执行标量的返回结果类型为object,可通过强制类型转换,转为整型;

            sqlConnection.Close();                                                          

            if (rowCount == 1)                                                              

            {

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

            else                                                                           

            {

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

);     

 

采用拼接连接数据库的方法容易出现漏洞,当不法分子在密码框中输入“ ‘) or 1=1;-- ”

就可以登录成功 ,此为注入式攻击,可用messagebox框查看

    

【代码】

 

MessageBox.show(sqlCommand.CommandText);

 

为了安全起见,我们采用SQL参数用法

【代码】

sqlCommand.CommandText =

                "SELECT COUNT(1) FROM tb_User WHERE No=@No AND Password=HASHBYTES('MD5',@Password);";   //指定SQL命令的命令文本;命令文本包含参数;

            #region SQL参数用法1

            SqlParameter sqlParameter =                                                                 //声明SQL参数

                sqlCommand.Parameters.AddWithValue("@No", this.txb_UserNo.Text.Trim());                 //调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值,同时实例化SQL参数;

            sqlParameter.SqlDbType = SqlDbType.Char;                                                    //设置SQL参数对应的SQL Server数据类型;

            sqlParameter.Size = 10;                                                                     //设置SQL参数的长度;

            #endregion

            #region SQL参数用法2

            sqlCommand.Parameters.AddWithValue("@Password", this.txb_Password.Text.Trim());             //直接调用方法AddWithValue向SQL命令的参数集合添加参数的名称、值;

            sqlCommand.Parameters["@Password"].SqlDbType = SqlDbType.VarChar;                           //通过参数名称访问SQL参数,并将密码参数的类型设为变长字符串;

                                                                                                        //SQL参数能自动识别类型;若参数值为字符串,则类型自动设为NVARCHAR,且可在执行时自动转换;但对于相同密码,VARCHAR/NVARCHAR类型所获得的散列值不同,故需手动将SQL参数类型统一设为VARCHAR;

            #endregion

 

 

这种方法无论无法分子输入什么字符到密码框中,都将作为一个参数与数据库中的密码进行匹配,密码正确则登陆成功,反之登录失败 。 

          

3、  数据库访问公共类

当我们将自己的数据库移动到另一台计算机上时,我们所连接的很多数据库将很容易出错,我们可以采取将数据库连接写入到配置文件里:

(1)创建应用程序配置文件(app.config)

 

记得创建

 

 (2)

    

(3)第三步:在应用程序中读取连接字符串

右击解决方案中的”引用:->添加引用

static string connString =

System.Configuration.ConfigurationManager.ConnectionStrings["ConnStri

ng"].ConnectionString;

 

4、写入——注册     

【异常错误】这种方法,当用户使用已存在的账号进行注册时,系统会以一种用户不理解的方式反馈,如下:

  

当我们加入如下代码时,系统将会告知用户哪里出了问题:

 

所以当我们注册使用已存在的账号时:

 

 

posted @ 2017-10-10 15:20  我是墩儿  阅读(1097)  评论(0)    收藏  举报