C#:登录界面、账号注册及密码修改

这是所有的界面名,今晚有个傻室友对这个名字有疑问,我还是贴上来吧。

1、登陆界面

1.1

1.2、代码段

public partial class Form1_login : Form
    {
        //定义连接数据库的字符串
        public static string connStr = "User Id=mathilda;Password=nishizhu951;
Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST= DESKTOP-ELVTTAI)(PORT=1521)))" + 
" (CONNECT_DATA =(SERVER = DEDICATED) (SERVICE_NAME = XE)))";
        public Form1_login()
        {
            InitializeComponent();
        }
        //整个窗体
        private void Form1_login_Load(object sender, EventArgs e)
        {

        }
        //登录按钮——连数据库
        private void button_login_Click(object sender, EventArgs e)
        {
            
            //建立数据新链接
            OracleConnection conn = new OracleConnection();
            try            
            {                
                conn.ConnectionString = connStr;   
                conn.Open(); //打开指定连接,打开数据库                
                MessageBox.Show(conn.State.ToString());//测试是否打开连接                
                OracleCommand cmd = conn.CreateCommand();//oracle命令类创建对象
                cmd.CommandText = String .Format("select * from manage");//从manage表中读取管理员学号/工号及登录密码               
                OracleDataReader ord = cmd.ExecuteReader();//执行该oracle语句            
                while(ord.Read())                
                {
                    MessageBox.Show(ord.GetOracleValue(0).ToString() +" 数据库学号");
                    MessageBox.Show(textBox_login_swno.Text + " 输入学号"); //判断是否读到学号!!! 
                    if(ord.GetOracleValue(0).ToString() == textBox_login_swno.Text)         //manage表中有该学号/工号
                    {
                       MessageBox.Show(ord.GetOracleValue(1).ToString() + " 数据库密码");                                    
                        MessageBox.Show(textBox_login_pwd.Text+" 读取密码");
                       if (ord.GetOracleValue(1).ToString() != textBox_login_pwd.Text)//比对该学号对应的密码与输入的密码
                       {
                           MessageBox.Show("登陆成功!");                                    //若相等,提示登录成功,进入操作界面,如下
                           Form2_operate frm = new Form2_operate();                          //跳转进入操作界面——Form2_operate
                           frm.Show();
                           this.Hide();
                       }
                       else
                           MessageBox.Show("密码输入有误!请重新输入。");//提示密码有误,请重新输入 
                    }
                }       
                ord.Close();
            }            
            catch (Exception ex)            
            {               
                MessageBox.Show(ex.Message.ToString());           
            }            
            finally           
            {               
                conn.Close(); 
            }
           
        }
        /*以下为其他按钮,暂时还未实现,等待修改
        //注册按钮——连数据库
        private void button_signin_Click(object sender, EventArgs e)
        {
            Form3_signin frm = new Form3_signin();
            frm.Show();
            this.Hide();
            //跳转到注册界面操作
        }
       //修改密码按钮——连数据库
        private void button_alterpwd_Click(object sender, EventArgs e)
        {
            Form4_alterpwd frm = new Form4_alterpwd();
            frm.Show();
            this.Hide();
            //跳转到写改密码界面操作
        }
        //退出按钮
        private void button_cancel_Click(object sender, EventArgs e)
        {
            button_login.Text = " ";
            button_cancel.Text = null;
            button_login.Focus();
            this.Close();
        }

        */

}

4.11:过来更新下,找到那个密码部分错误的原因啦!现在可以改为==啦

其实这段代码没有错,错在数据库里的字符类型......

当我用messagebox将两个密码输出时,是这样的

 明明是一模一样的内容,怎么后面空出来一大段!!!!!!   

后来才发现我数据库里所有的数据类型用的都是char,而不是varchar,我们来看下两者的区别

参考资料来源:https://www.cnblogs.com/Berryxiong/p/6248464.html

在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下选择塔门的理由。

    (1) char的长度是不可变的;

       而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

    (2)char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

就是这个字符类型,导致我登录必须要密码不一致才能登录......

1.3、登陆成功,啦啦啦~

2、注册按钮

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client;


namespace Graduation
{
    public partial class Form3_signin : Form
    {
        public Form3_signin()
        {
            InitializeComponent();
        }

        private void Form3s_signin_Load(object sender, EventArgs e)
        {

        }
        //注册按钮
        private void button_f3_yes_Click(object sender, EventArgs e)
        {
            OracleConnection conn = new OracleConnection();
            bool flag = true;
            try
            {
                conn.ConnectionString = Form1_login.connStr;
                conn.Open();                                //打开指定连接,打开数据库                
                //MessageBox.Show(conn.State.ToString());     //测试是否打开连接                
                OracleCommand cmd = conn.CreateCommand();
                cmd.CommandText = String.Format("select * from manage");
                OracleDataReader ord = cmd.ExecuteReader();
                while (ord.Read())
                {
                    //MessageBox.Show(ord.GetOracleValue(0).ToString()+" 数据库学号\n"
                    //+textBox_signin_swno.Text+" 输入学号"); 
                    //判断是否读到学号!!! 
                    if (ord.GetOracleValue(0).ToString() == textBox_signin_swno.Text)    //manage表中有该学号/工号
                    {
                        MessageBox.Show("该账号已被注册,请重新输入账号!");
                        flag = false;//标记有无账号重复
                    }
                }
                if (flag)//flag = true无账号重复,可以注册
                {
                    cmd.CommandText = String.Format("insert into manage values('{0}','{1}')", textBox_signin_swno.Text, textBox_signin_pwd.Text);
                    ord = cmd.ExecuteReader();
                    MessageBox.Show("账号注册成功!");
                }
               //else
                //   MessageBox.Show("读取数据失败!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                conn.Close();
            }
            
        }
        //返回按钮
        private void button_f3_return_Click(object sender, EventArgs e)
        {
            Form1_login frm = new Form1_login();
            frm.Show();
            this.Hide();
        }

       
    }
}

效果是这样的

关于VS2012连接oracle数据库,请转到https://blog.csdn.net/qq_35591140/article/details/89173252

发布了11 篇原创文章 · 获赞 7 · 访问量 5255

猜你喜欢

转载自blog.csdn.net/qq_35591140/article/details/89191344