基于C#的Access数据库的界面登陆_初体验数据库

来源:互联网 发布:hive sql select in 编辑:程序博客网 时间:2024/05/21 16:56

在学习C#一小段时间后,网上逛发现对于C#这类界面开发,如果要做一个好一点的应用,不用数据库基本上不可能了。以前懒得学,都是用文件方式存储,然后再程序初始化的时候读出,并沾沾自喜的说,其实这样甚至在不用程序的时候也能修改。但是后来发现,不可控制的隐藏字符深深的伤害。今天下定决心学习下数据库,从Access开始。毕竟这是最早过的NCRE所“推荐”的嘛。

首先呢,是安装Access,网上很容易下到,我用的是2010,跟word保持一致。

安装完后,新建了一个“数据库”,名字叫做user.accdb,并且里边的数据表叫做user,字段有ID(自带)、UserName、Password三个(后来因为这个该死的user表的起名,折腾一阵)。

根据baidu头条,了解到数据库编写在完成以上准备工作以后,需要做“connect”工作。

于是写下了

           OleDbCommand cmd;            //access数据库连接语句            string oleDBString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + accdb_path;            //创建连接对象            OleDbConnection conn = new OleDbConnection(oleDBString);            conn.Open();
当然,为了能够确保代码能够重用,所以果断封装在了一个方法当中,成了下边的样子……

        public OleDbCommand accdbConnect(string strSql, string accdb_path)        {            OleDbCommand cmd;            //access数据库连接语句            string oleDBString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + accdb_path;            //创建连接对象            OleDbConnection conn = new OleDbConnection(oleDBString);            conn.Open();            //创建命令对象            cmd = new OleDbCommand(strSql, conn);            return cmd;        }
幸好我用的是绝对路径,所以可能出现的相对路径错误并没有出现,而且在form_load()当中,我还写下了判断该数据库是否存在:

            if (!File.Exists(str_tempFile))            {//查找选择的文件是否存在                MessageBox.Show(str_tempFile + "数据库文件不存在或路径不正确。\n请确认文件存在后重启程序", "找不到文件", MessageBoxButtons.OK, MessageBoxIcon.Error);                this.Close();            }
当然啦,这些工作本来应该是try-catch的工作,不过作为以C语言为主业的小猿来说,还是习惯自己这样判断。大虾勿喷~

这里开始最烦人的了,要写出查找语句。这里可以发现,其实所谓的数据库操作,都是制作一个字符串,内容是对数据库操作的一个命令行字符串,然后通过给cmd赋值来传送进去。所以这时候要想在数据库检索和匹配用户名密码就要用到数据库语法,然后制作命令行字符串,传参进去。经过N小时查找,终于找到了我需要的:

 //Access data base grammar about select:            //(1)select * from 表名            //(2)select 字段1,字段2,字段3.... from 表名            //(3)select * from 表名 where 条件            //(4)select 字段1,字段2,字段3.... from 表名 where 条件            //(5)select top 5 字段 from 表名(显示某字段前几项)            //(6)select distinct 字段 from 表名(不重复显示字段)            //(7)select * from 表名 where 年龄 between 20 and 30(在...之间)            string str_sql_cmdSearch = "SELECT UserName,Password FROM [User] where UserName='" + temp_Name + "' and Password='" + temp_Password +"'";
为了方便以后维护,直接注释在这里,方便看。当然啦,没有用summary括起来,等熟悉以后再说啊。

这样基本就明确了。当然这里需要注意的是用户名和密码的值,还要用单引号括起来,这个语法一开始小猿没有注意到,直接报错FROM语法不对,着实恼火半天,以为关键字大小写问题,怎么改都不对,最后反过头来看baidu 的报错说明,才知道!同时发现,user居然是关键字!!好吧,推倒重来,为了减少代码修改工作量,就将user首字母大写好了。于是完成了……

        private void btn_Login_Click(object sender, EventArgs e)        {            string str_tempFile = "C:\\Users....Debug\\User.accdb";            string temp_Name = txt_UserName.Text;            string temp_Password = txt_Pswd.Text;            bool Flag_Login = false;            //Access data base grammar about select:            //(1)select * from 表名            //(2)select 字段1,字段2,字段3.... from 表名            //(3)select * from 表名 where 条件            //(4)select 字段1,字段2,字段3.... from 表名 where 条件            //(5)select top 5 字段 from 表名(显示某字段前几项)            //(6)select distinct 字段 from 表名(不重复显示字段)            //(7)select * from 表名 where 年龄 between 20 and 30(在...之间)            string str_sql_cmdSearch = "SELECT UserName,Password FROM [User] where UserName='" + temp_Name + "' and Password='" + temp_Password +"'";            try            {                OleDbCommand accdb_UserLogin_Cmd = accdbConnect(str_sql_cmdSearch, str_tempFile);                OleDbDataReader accdb_UserLogin_reader =accdb_UserLogin_Cmd.ExecuteReader();                if (accdb_UserLogin_reader.Read())                {                    Flag_Login = true;                }                else                 {                    MessageBox.Show("用户名或密码错误!", "登录失败", MessageBoxButtons.OK, MessageBoxIcon.Error);                    return;                }            }            catch (ArgumentException ex_cmd)            {                MessageBox.Show(ex_cmd.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);            }            if (Flag_Login)            {                frm_EnDeCrypt EnDeCrypt = new frm_EnDeCrypt();                EnDeCrypt.Show();            }            else            {                MessageBox.Show("用户名或密码错误", "禁止登陆", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);            }            Flag_Login = false;        }

首次学习数据库任务完成!





0 0
原创粉丝点击