原 C#基础知识及题目练习 Day23 ADO.NET 连接数据库和查询 实现登录、注册、修改密码

目录

一、SQLConnection 连接数据库

二、SqlCommand 数据库操作

三、SQLDataReader:从数据库中获取数据

四、练习:通过数据库登录、注册、修改密码


Ado.net : 在程序中,通过Ado.net访问数据库

一、SQLConnection 连接数据库

    (水管子) 负责连接数据库

ConnectionString:连接字符串 指定你想连接哪个数据库(服务器名称),连接的用户名和密码。

open():打开数据库连接

close():关闭数据库连接

建立连接步骤:

1) 添加命名空间:using System.Data.SqlClient;    //添加对Ado.net命名空间的引用

2)创建连接字符串

  • data source:服务器名称。
  • Initial catalog/database:数据库名称
  • user id:数据库登录名
  • pwd:密码

3)实例化数据库连接对象,将连接字符串属性赋值成步骤2的字符串

4)打开数据库连接   Open()

5)关闭数据库连接: Close()  

 

二、SqlCommand 数据库操作

数据库上做操作,比如说增、删、改、查

属性:

1)Connection:数据库连接对象,也就是上一步创建的连接对象

2)CommandText:要让数据库做什么,通过这个属性赋值。将要执行的sql语句赋值给该对象

方法:

1)ExecuteNonQuery():如果执行增(insert)、删(delete)、改(update),返回-1表示执行失败,非-1的值表示执行成功.
                    如果执行查询(select),返回值无意义。
                    
2 ) ExecuteReader() : 执行查询语句,返回DataReader对象。

3)ExecuteScalar() : 执行查询语句,只能返回单个查询结果。返回第一行、第一列的值

登录功能步骤:

  • 1)添加命名空间:using System.Data.SqlClient; 
  • 2)创建连接字符串
  • 3)实例化数据库连接对象,将连接字符串属性赋值成步骤2的字符串
  • 4)打开数据库连接   Open()
  • 5)创建SqlCommand对象
  • 6)将Connection对象赋值给它
  • 7)编写sql语句,将sql语句赋值给CommandText属性
  • 8)调用方法,执行Command命令
  • 9)关闭数据库连接
using System.Data.SqlClient;    //1、添加命名空间

namespace LoginForm
{
    public partial class Form1 : Form
    {
        //2、创建数据库连接字符串
        string strCon = "data source=.;database=ttt;user id=sa;pwd=admin123";
        public Form1()
        {
            InitializeComponent();
        }
        //登录
        private void button1_Click(object sender, EventArgs e)
        {
            //3、实例化数据库连接对象
            SqlConnection con = new SqlConnection(strCon);
            //4、打开数据库连接
            con.Open();
            //5、创建SqlCommand对象
            SqlCommand cmd = new SqlCommand();
            //6、将Connection对象赋值给它
            cmd.Connection = con;
            //7、编写sql语句,将sql语句赋值给CommandText属性
            string userName = textBox1.Text.Trim(); //用户名
            string pwd = textBox2.Text.Trim();  //密码
            string sql = string.Format("select COUNT(*) from Users where loginId='{0}' and loginPwd='{1}'",userName,pwd);
            cmd.CommandText = sql;
            //8、调用方法,执行Command命令
            object b= cmd.ExecuteScalar();
            int n = (int)b; //强制转换成整数
            if (n > 0)     //账号密码正确
            {
                Form2 frm = new Form2();
                frm.ShowDialog();
            }
            else
            {
                MessageBox.Show("账号或密码错误,请重新输入!");
            }
            //9、关闭数据库连接
            con.Close();
        }
    }
}


三、SQLDataReader:从数据库中获取数据

属性:
HasRows:是否返回了查询结果,如果返回,则为true;否则为false。
FieldCount : 当前行中的列数

方法:
Read():从数据库中读取数据,一次只能读取一行,如果读取成功,返回true;失败,返回false。
Close():关闭该对象

eg:读取数据库信息显示到datagrideview中:

public partial class main : Form
    {
        /// <summary>
        /// 2、数据库连接字符串
        /// </summary>
        string strCon = Common.connStr;

        //书籍集合,存储所有书籍信息
        List<Book> lstB = new List<Book>();
        public main()
        {
            InitializeComponent();
        }

        private void btnRead_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(strCon);
            con.Open();
            string sql = string.Format("select * From Bookstore");
            SqlCommand cmd = new SqlCommand(sql,con);
            //调用方法,执行Command命令,返回Reader对象
            SqlDataReader reader = cmd.ExecuteReader();
            //判断是否读取到了数据
            if (reader.HasRows)
            {
                //循环接收读取到的数据
                while (reader.Read())
                {
                    //获取每一列的值
                    int id = (int)reader["bookID"];
                    string name = reader["bookName"].ToString();
                    string author = reader["Author"].ToString();
                    string category = reader["Category"].ToString();
                    string intro = reader["Intro"].ToString();
                    string imgPath = reader["imgPath"].ToString();
                    string txtPath = reader["txtPath"].ToString();
                    double price = (double)reader["Price"];
                    //实例化一个类对象,存储该行数据
                    Book b = new Book(id, name, author, category, intro, imgPath, txtPath, price);
                    //将该类对象添加到集合中
                    lstB.Add(b);

                }
                //为DataGridView赋数据源
                dataGridView1.DataSource = lstB;
            }
            //关闭DataReader对象
            //关闭数据库连接
            reader.Close();
            con.Close();
        }
    }

四、练习:通过数据库登录、注册、修改密码

要求:创建一个用户名、密码的登录窗体,从数据库中读取出账号、密码进行校验,校验成功,进行登录;
        添加一个账号注册界面,将注册账号存入数据库中(不允许添加数据库中已有账号,需要进行判断);
        添加一个修改密码界面,要求:先输入旧密码,密码输入正确才能进行修改,修改以后,更新到数据库中

1.登录:见上文

2.注册:

注:Common.connStr为ConnectionString连接字符串

纠错!!

if (username == "" || pwd == "" || pwd2 == "")
                {
                    MessageBox.Show("用户名或密码不能为空!");
                }

不能用null!

public partial class Register : Form
    {
        public Register()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            { 
                string username = txtBoxUser.Text.Trim();
                string pwd = txtBoxPwd.Text.Trim();
                string pwd2 = txtBoxPwd2.Text.Trim();
                string strSql = string.Format("select userName from USers where userName='{0}'", username);
                string strSqlAdd = string.Format("insert into Users(userName,Password) values('{0}', '{1}') ", username, pwd);
                using (SqlConnection conn = new SqlConnection(Common.connStr))
                {
                    using (SqlCommand cmd = new SqlCommand(strSql, conn))
                    {
                        conn.Open();
                        //object reName = cmd.ExecuteScalar();
                        //string reNameStr = reName.ToString();
                        SqlDataReader reader = cmd.ExecuteReader();
                        if (username == null || pwd == null || pwd2 == null)
                        {
                            MessageBox.Show("用户名或密码不能为空!");
                        }
                        else if (reader.HasRows)
                        {
                            MessageBox.Show("用户名已存在!");
                        }
                        else if (pwd != pwd2)
                        {
                            MessageBox.Show("两次密码输入不一致!");
                        }
                        else
                        {
                            reader.Close();
                            cmd.CommandText = strSqlAdd;
                            int x = cmd.ExecuteNonQuery();
                            if (x != -1)
                            {
                                MessageBox.Show("注册成功!");
                            }
                            else
                            {
                                MessageBox.Show("注册失败!");
                            }
                        }
                        reader.Close();
                    }
                    conn.Close();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("出现异常");
            }
        }
    }

3.修改密码

public partial class ChangePwd : Form
    {
        public ChangePwd()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string username = txtBoxUser.Text.Trim();
            string pwdOld = txtBoxPwd3.Text.Trim();
            string pwd = txtBoxPwd.Text.Trim();
            string pwd2 = txtBoxPwd2.Text.Trim();
            string strSql = string.Format("select userName from USers where userName='{0}'", username);
            string strSqlPwd = string.Format("select Password from USers where userName='{0}'", username);
            string strSqlUpdate = string.Format("update Users set Password='{0}' where userName='{1}' ", pwd , username);
            using (SqlConnection conn = new SqlConnection(Common.connStr))
            {
                using (SqlCommand cmd = new SqlCommand(strSql, conn))
                {
                    conn.Open();
                    //object reName = cmd.ExecuteScalar();
                    //string reNameStr = reName.ToString();
                    SqlDataReader reader = cmd.ExecuteReader();
                    
                    if (username == null || pwdOld == null || pwd == null || pwd2 == null)
                    {
                        MessageBox.Show("用户名或密码不能为空!");
                    }
                    else if (reader.HasRows)//用户名存在
                    {
                        reader.Close();
                        cmd.CommandText = strSqlPwd;
                        //object b = cmd.ExecuteScalar();
                        //string rePwd = b.ToString();
                        if (pwdOld != cmd.ExecuteScalar().ToString())
                        {
                            MessageBox.Show("原密码输入错误!");
                        }
                        else if (pwd != pwd2)
                        {
                            MessageBox.Show("两次密码输入不一致!");
                        }
                        else
                        {
                            cmd.CommandText = strSqlUpdate;
                            int x = cmd.ExecuteNonQuery();
                            if (x != -1)
                            {
                                MessageBox.Show("密码修改成功!");
                            }
                            else
                            {
                                MessageBox.Show("密码修改失败!");
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("用户名不存在!");
                    }
                    reader.Close();
                }
                conn.Close();
            }
        }
    }


 

  • 7
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值