C#|access数据库查找以及如果结果中存在多个匹配用户该怎么处理?

查找用户的界面为:

首先对查找条件进行赋值:

            if (radioButton1.Checked)
                serMatchInfo = "用户姓名";
            if (radioButton2.Checked)
                serMatchInfo = "用户编号";
            if (radioButton3.Checked)
                serMatchInfo = "手机号码";        

之后判断匹配信息是否输入:

  if (serMatchInfo == "")
            {
                MessageBox.Show("请选择查询条件!", "提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
            }
            else
            {
                if (textBoxSearch.Text.Trim() == "")
                {
                    MessageBox.Show("请输入匹配信息!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else。。。。

然后建立数据库连接,进行查询操作:

  serMatchInput = textBoxSearch.Text.Trim();
                    OleDbConnection conn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source=****.mdb"); //Jet OLEDB:Database Password=
                    OleDbCommand cmd = conn.CreateCommand();
                    cmd.CommandText = "select * from userFile where ["+ serMatchInfo+"]='"+ serMatchInput+"'";
                    conn.Open();
                    OleDbDataReader dr = cmd.ExecuteReader();
                    DataTable dt = new DataTable();
                    if (dr.HasRows)
                    {
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            dt.Columns.Add(dr.GetName(i));
                        }
                        dt.Rows.Clear();
                    }
                    while (dr.Read())
                    {
                        DataRow row = dt.NewRow();
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            row[i] = dr[i];
                        }
                        dt.Rows.Add(row);
                    }

设定一个参数传入查询结果的行数,以此判断结果。

如果不存在用户:

  searchCount = dt.Rows.Count;//记录查询的条数
                    conn.Close();
                    if (searchCount == 0)
                    {
                        infoSearch.Show();
                        infoSearch.Text = "不存在" + serMatchInfo + "为:" + serMatchInput + "的用户信息!";
                        textBoxName.Text = "";
                        textBoxName.Text = "";
                        textBoxId.Text = "";
                        textBoxPh.Text = "";
                        textBoxGen.Text = "";
                        textBoxBir.Text = "";
                        textBoxAge.Text = "";
                        buttonNext.ForeColor = Color.Black;
                        buttonNext.Enabled = false;

                    }

如果存在一个匹配用户:

 if (searchCount == 1)
                        {
                            buttonNext.ForeColor = Color.Black;
                            buttonNext.Enabled = false;
                            infoSearch.Show();
                            infoSearch.Text = "一共查询到" + searchCount + "条记录!";
                            textBoxName.Text = dt.Rows[0]["用户姓名"].ToString();
                            textBoxName.Text = dt.Rows[0]["用户姓名"].ToString();
                            textBoxId.Text = dt.Rows[0]["用户编号"].ToString();
                            textBoxPh.Text = dt.Rows[0]["手机号码"].ToString();
                            textBoxGen.Text = dt.Rows[0]["性别"].ToString();
                            textBoxBir.Text = dt.Rows[0]["出生日期"].ToString();
                            textBoxAge.Text = dt.Rows[0]["年龄"].ToString();
                            buttonClick = 0;
                        }

功能实现截图:

数据库中编号唯一,手机号码实际中也应该是唯一的。那么,如果出现重名的情况怎么办?

建立点击查看下一个的按钮,首先设置当结果只有一个时,该按钮不可点击,当结果为多个时,点击查看下一个,执行。

写一个重名的用户:

在按钮点击事件中:载入查询结果的表格。

然后现在点击查询的事件中,让buttonClick = 0;//这个值是用来记录点击的次数的,进而对应查询结果的行数,这样的话,就能够不论在什么时候点击查询,都能够让多个结果从第一个显示到最后一个,而不出现连续点击的时候重复显示的情况。

对点击查看下一个按钮的事件进行逻辑判断:

        private void buttonNext_Click(object sender, EventArgs e)
        {           
            serMatchInput = textBoxSearch.Text.Trim();
            OleDbConnection conn = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source=xueya.mdb"); //Jet OLEDB:Database Password=
            OleDbCommand cmd = conn.CreateCommand();
            cmd.CommandText = "select * from userFile where [" + serMatchInfo + "]='" + serMatchInput + "'";
            conn.Open();
            OleDbDataReader dr = cmd.ExecuteReader();
            DataTable dt = new DataTable();
            if (dr.HasRows)
            {
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    dt.Columns.Add(dr.GetName(i));
                }
                dt.Rows.Clear();
            }
            while (dr.Read())
            {
                DataRow row = dt.NewRow();
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    row[i] = dr[i];
                }
                dt.Rows.Add(row);
            }           
            conn.Close();
            if(buttonClick == dt.Rows.Count-1)
            {
                textBoxName.Text = dt.Rows[0]["用户姓名"].ToString();
                textBoxName.Text = dt.Rows[0]["用户姓名"].ToString();
                textBoxId.Text = dt.Rows[0]["用户编号"].ToString();
                textBoxPh.Text = dt.Rows[0]["手机号码"].ToString();
                textBoxGen.Text = dt.Rows[0]["性别"].ToString();
                textBoxBir.Text = dt.Rows[0]["出生日期"].ToString();
                textBoxAge.Text = dt.Rows[0]["年龄"].ToString();
                buttonClick = 0;
            }
            else
            {
                buttonClick += 1;
                textBoxName.Text = dt.Rows[buttonClick]["用户姓名"].ToString();
                textBoxName.Text = dt.Rows[buttonClick]["用户姓名"].ToString();
                textBoxId.Text = dt.Rows[buttonClick]["用户编号"].ToString();
                textBoxPh.Text = dt.Rows[buttonClick]["手机号码"].ToString();
                textBoxGen.Text = dt.Rows[buttonClick]["性别"].ToString();
                textBoxBir.Text = dt.Rows[buttonClick]["出生日期"].ToString();
                textBoxAge.Text = dt.Rows[buttonClick]["年龄"].ToString();
            }
        }

执行结果:

这样,就能够将相应查询功能写入到scoket数据接收与保存的地方实现功能。

posted @ 2018-08-24 16:55  Tiger_Jiang  阅读(941)  评论(0编辑  收藏  举报