老程序员学C# ------实例一 登陆系统的数据库操作

来源:互联网 发布:手机免费刷会员软件 编辑:程序博客网 时间:2024/06/06 10:38

在项目中,我们通常会将数据库操作单独提出来,封装成为一个类,在需要调用的时候,直接使用该类的相关操作函数,这样减少代码的重复量,也便于程序员模块化构建和风格化的阅读。

这里,通过一个登陆对话框的实例来说明数据库操作封装的过程。相关代码可以在项目中直接使用。

首先,创建一个窗口项目,并将控件拖到窗口上创建如下窗口元素:

再添加一个窗口form2,如下:

SQL2005数据库中建立数据库testDB,在该数据库下创建表TB_Login,相关字段信息如下:

其中ID字段的数据类型下,设置为自动更新项,方法是打开该列属性下的标示规范,选择是,增量选1。如图:

我们实现的目标是,程序运行form1窗口,显示登陆窗口,用户输入用户名和密码,如果与数据库中的对应字段相匹配,那么就显示form2,并在form2中显示相应的用户+“您已经成功登陆!”。

一,首先添加数据库操作类

在右边的解决方案资源管理器中,右键点击项目名称Login ,选择“添加…”,选择添加类,在弹出的对话框中,输入该类的名称:Cls_DataOp.cs

 

 

双击创建的类Cls_DataOp.cs,开始创建代码。

首先加入两个数据库操作支持类库:

using System.Data.SqlClient;

using System.Data;

 

应为数据库连接字符串我们要在所有函数中都要调用,所以作为全局变量来声明:

string str_conn = @"Data Source=(local)/SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=testDB;";

SqlConnection conn;

 

首先编写数据库连接函数:

#region

        /// <summary>

        /// 打开数据库连接

        /// </summary>

        public void SQL_conn()

        {

            try

            {

                conn = new SqlConnection(str_conn);

                conn.Open();

            }

            catch

            {

                throw;

                }         

        }

#endregion

数据库操作一般有三种方式,一种是查询出某一个字段的值,一种是查询出结果是一个数据表,最后就是查询出数据数量。分别根据这三个目的,创建相应的函数。

一,获得查询到数据的第一行第一列数据内容

#region

 

        /// <summary>

        /// 获得查询到数据的第一行第一列数据内容

        /// </summary>

        /// <param name="str_sql"></param>

        public object SQL_GetWord(string str_sql)

        {

            try

            {

                SQL_conn();

                SqlCommand SQL_comd = new SqlCommand(str_sql, conn);

                return SQL_comd.ExecuteScalar();

 

            }

            catch

            {

                throw;

            }

            finally

            { conn.Close(); }

        }

 

        #endregion

二,获得查询到数据的数据表

#region

        /// <summary>

        /// 获得查询到数据的数据表

        /// </summary>

        /// <param name="str_sql"></param>

        /// <returns></returns>

        public DataTable SQL_GetTable(string str_sql)

        {

            try

            {

                SQL_conn();

                SqlCommand SQL_comd = new SqlCommand(str_sql, conn);

                SqlDataAdapter SQL_adp = new SqlDataAdapter(SQL_comd);

                DataSet ds = new DataSet();

                SQL_adp.Fill(ds);

                return ds.Tables[0];

 

            }

            catch { throw; }

            finally { conn.Close(); }

 

        }

 

        #endregion

三,获得查询结果的数量

#region

        /// <summary>

        /// 获得查询结果的数量

        /// </summary>

        /// <param name="str_sql"></param>

        /// <returns></returns>

        public int SQL_GetCount(string str_sql)

        {

            try {

                SQL_conn();

                SqlCommand SQL_comd = new SqlCommand(str_sql, conn);

                return SQL_comd.ExecuteNonQuery();

           

            }

            catch { throw; }

            finally { conn.Close(); }

        }

        #endregion

数据库操作类的所有成员创建完了,然后开始给Form1的登陆按钮和取消按钮创建事件。

首先创建“取消”按钮事件。

双击“取消”按钮控件,创建该控件的Click事件,代码如下:

    private void button2_Click(object sender, EventArgs e)

        {

            this.Close();//关闭窗口       

        }

双击“登陆”按钮,添加Click事件,代码如下:

private void button1_Click(object sender, EventArgs e)

        {

               //数据库操作      

            Cls_DataOp Doper = new Cls_DataOp();

            object pwd = Doper.SQL_GetWord("select user_pwd from TB_Login");

            object name = Doper.SQL_GetWord("select user_name from TB_Login");

 

 

            //判断用户名是否为空

            if (textBox1.Text == "")

            { MessageBox.Show("用户名文本框为空!"); return; }

            else

            {

                //判断数据库中user_name字段是否为空

                if (name == null)

                {

                    MessageBox.Show("数据库中user_name字段为空!"); return;

                }

                else

                {

                    //判断用户名是否与数据库中的user_name字段内容相等

                    if (textBox1.Text == name.ToString().Trim())

                    {

                        MessageBox.Show("用户名确认正确!");

                        //判断密码框是否为空

                      if (textBox2.Text == "")

                         { MessageBox.Show("密码文本框为空!"); return; }

                      else

                         {

                          //判断数据库中密码字段是否为空

                          if (pwd == null)

                             {

                                MessageBox.Show("数据库中user_pwd字段为空 "); return;

                              }

                         else

                             {

                              //判断密码框与数据库中密码字段是否相等

                                 if (textBox2.Text == pwd.ToString().Trim())

                                    {

                                       MessageBox.Show("密码已经确认!");

                                       //用户名确认,密码确认相等后,执行下面操作:打开form2窗口,并将用户名赋值给全局变量user_name.

                                       user_name = textBox1.Text.Trim();

                                       Form2 frm2 = new Form2();

                                       frm2.Show();

                                       this.Hide();

                                      

                                        return;

                                     }

                                else

                                     {

                                      MessageBox.Show("密码错误,输入的密码与数据库里user_pwd字段内容不匹配!"); return;

                                     }

                              }

                          }

 

 

                     }

                    else

                    {

                        MessageBox.Show("用户名错误,输入的用户名与数据库里user_name字段内容不匹配!"); return;

                    }

                }

            }        

        }

这里定义一个全局变量作为参数传递。

public static string user_name = "";

然后再form2窗口中,双击窗口,添加如下代码:

private void Form2_Load(object sender, EventArgs e)

        {

            label2.Text = Form1.user_name;

        }

此时运行程序如图:

 

 

 

该实例完成。

原创粉丝点击