在公司实在是无聊啊 ,所以自己动手敲了下大一时学的C#窗体程序制作
在实现修改密码的时候,遇到了个问题,烦请大佬给予帮助

大致的功能是这样的,修改密码必须要每个输入框控件必须填写,不能为空,还需要验证输入账号和旧的密码与数据库中的相同,不然都会弹窗提示。

但是按照我的代码来,判断所有的输入框文本不能为空,但是代码还是会走下去,然后直接密码直接诶修改成功。此时只填写了用户名,修改成功后密码数据库中是为null空的。

运行截图:
1.png
2.png
代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace dome
{
    public partial class PwdModify : Form
    {
        public PwdModify()
        {
            InitializeComponent();
        }

        private void btnModify_Click(object sender, EventArgs e)
        {
            string user1 = txtUser.Text.Trim();//变量赋值给用户名
            string oldpwd = txtOldPwd.Text.Trim();//变量赋值给老密码
            string newpwd = txtNewPwd.Text.Trim();//变量赋值给新密码
            string renewpwd = txtReNewPwd.Text.Trim();//变量赋值给重复输入的新密码

            
            //判断输入控件是否全部填写
            if (txtUser.Text == "" || txtOldPwd.Text == "" || txtNewPwd.Text == "" || txtReNewPwd.Text == "")
            {
                MessageBox.Show("任何一项不能为空!"); //如果有一个控件没有输入,则弹窗提示
            }
            else
            {
                txtUser.Focus();//聚焦到用户名输入框
                return;
            }
            if (txtNewPwd.Text != txtReNewPwd.Text) //判断两次输入的新密码是否为一致
            {
                MessageBox.Show("您两次输入的密码不一致!"); //弹窗提示两次输入的密码不一致
            }
            else
            {
                txtNewPwd.Focus();//然后再聚焦到新密码输入框
            }
            string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/DB/niupi.accdb;Persist Security Info=True";
            OleDbConnection con = new OleDbConnection(conStr);//创建连接对象
            con.Open(); //打开数据库
            string sql = "select * from Users where Users='" + user1 + "'";//查询用户名是否存在的sql语句
            OleDbCommand cmd = new OleDbCommand(sql, con);//定义对象并连接数据库
            cmd.CommandType = CommandType.Text;
            OleDbDataReader sdr;
            sdr = cmd.ExecuteReader();
            if (sdr.Read())
            {
                //这里判断输入的用户名是否与存在与数据库中,不做执行语句。
            }
            else
            {
                MessageBox.Show("数据库中不存在'" + user1 + "'用户名!");
                return;
            }
            //查询输入的老密码是否与数据库中的老密码一致。
            con.Close();//因为需要再次用到Reader,所以必须先关闭
            con.Open();//打开数据库连接,执行下面的语句
            string sql1 = "select * from Pwd where='" + oldpwd + "'";
            OleDbCommand cmd1 = new OleDbCommand(sql1, con);
            cmd.CommandType = CommandType.Text;
            OleDbDataReader sdr1;
            sdr1 = cmd.ExecuteReader();
            if (sdr1.Read())
            {
               //这里判断旧的密码是否输入正确,不做执行语句。 
            }
            else
            {
                MessageBox.Show("旧密码输入错误,请检查!");
                txtOldPwd.Focus();
                return;
            }
            con.Close();
            con.Open();//打开数据库,准备更新密码。
            string sql2 = "update Users set Pwd='" + newpwd + "' where Users='" + user1 + "'";//修改密码的sql语句
            OleDbCommand cmd2 = new OleDbCommand(sql2, con);//定义对象并连接数据库
            int i = cmd2.ExecuteNonQuery();
            if (i == 1)
            {
                MessageBox.Show("密码修改成功!");//修改成功,弹窗提示
                users user = new users();//创建用户中心对象
                this.Close();//关闭修改密码窗体
                user.Show();//跳转用户中心窗体
            }
            else
            {
                MessageBox.Show("密码修改失败!");
                con.Close();//关闭数据库连接
            }
        }
    }
}

逻辑顺序有问题 ,修改了下逻辑就好了,在此感谢迷恋大佬的指点。 以下是修改好的代码!

            string user1 = txtUser.Text.Trim();//变量赋值给用户名
            string oldpwd = txtOldPwd.Text.Trim();//变量赋值给老密码
            string newpwd = txtNewPwd.Text.Trim();//变量赋值给新密码
            string renewpwd = txtReNewPwd.Text.Trim();//变量赋值给重复输入的新密码

            string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|/DB/niupi.accdb;Persist Security Info=True";
            OleDbConnection con = new OleDbConnection(conStr);//创建连接对象
            con.Open(); //打开数据库
            string sql = "select * from Users where Users='" + user1 + "'";//查询用户名是否存在的sql语句
            OleDbCommand cmd = new OleDbCommand(sql, con);//定义对象并连接数据库
            cmd.CommandType = CommandType.Text;
            OleDbDataReader sdr;
            sdr = cmd.ExecuteReader();
            if (sdr.Read())
            {
                //不执行语句。。。
            }
            else
            {
                MessageBox.Show("数据库中不存在'" + user1 + "'用户名!");
            }
            //查询输入的老密码是否与数据库中的老密码一致。
            con.Close();//因为需要再次用到Reader,所以必须先关闭
            con.Open();//打开数据库连接,执行下面的语句
            string sql1 = "select * from Pwd where='" + txtOldPwd.Text.Trim() + "'";
            OleDbCommand cmd1 = new OleDbCommand(sql1, con);
            cmd.CommandType = CommandType.Text;
            OleDbDataReader sdr1;
            sdr1 = cmd.ExecuteReader();
            if (sdr1.Read())
            {
                //判断输入控件是否全部填写 
                if (user1 == "" || oldpwd == "" || newpwd == "" || renewpwd == "")
                {
                    MessageBox.Show("任何一项不能为空!"); //如果有一个控件没有输入,则弹窗提示
                    txtUser.Focus();
                }
                else
                {
                    if (txtNewPwd.Text == txtReNewPwd.Text) //判断两次输入的新密码是否为一致
                    {
                        string sql2 = "update Users set Pwd='" + newpwd + "' where Users='" + user1 + "'";//修改密码的sql语句
                        OleDbCommand cmd2 = new OleDbCommand(sql2, con);//定义对象并连接数据库
                        int i = cmd2.ExecuteNonQuery();
                        if (i == 1)
                        {

                            MessageBox.Show("密码修改成功!");//修改成功,弹窗提示
                            users user = new users();//创建用户中心对象
                            this.Close();//关闭修改密码窗体
                            user.Show();//跳转用户中心窗体
                        }
                        else
                        {
                            MessageBox.Show("密码修改失败!");
                            con.Close();//关闭数据库连接
                        }

                    }
                    else
                    {
                        MessageBox.Show("您两次输入的密码不一致!"); //弹窗提示两次输入的密码不一致
                        txtNewPwd.Focus();//然后再聚焦到新密码输入框
                    }
                }
            }
            else
            {
                MessageBox.Show("旧密码输入错误,请检查!");
                txtOldPwd.Focus();
            }
Last modification:January 10th, 2020 at 10:12 am
If you think my article is useful to you, please feel free to appreciate