C#写QQ通讯录

作者: 花伤情犹在 | 来源:发表于2020-12-06 18:03 被阅读0次

    增删改查功能设计思路:

    增加功能:

    //获取对应的值
                string name = textname.Text;//姓名
                string phone = textphone.Text;//手机号
                string address = textaddress.Text;//地址
                string connStr = "Data Source=花伤情犹在;Initial Catalog=AddressList;Integrated Security=True";
                SqlConnection conn = new SqlConnection(connStr);
                conn.Open();//打开数据库
                if (conn.State == ConnectionState.Open)//如果数据库是打开状态
                {
                    //访问数据
                    string sql = "insert into Linkinfo values ('"+name+"','"+phone+"','"+address+"')";
                    SqlCommand command = new SqlCommand(sql,conn);
                    int num = command.ExecuteNonQuery();
                    if (num > 0)
                    {
                        MessageBox.Show("新增成功");
                    }
                    else
                    {
                        MessageBox.Show("新增失败");
                    }
                    conn.Close();
                }
    

    name,phone,address三个变量用于接收(姓名,手机号,地址)

    ExecuteNonQuery执行一个SqlCommand,该命令返回受操作影响的行数,,但对于其他操作,如数据库的操作结构,如果返回-1操作成功时,这种情况与我们平常的思维方式有点差距所以应该注意了。

    简单意味着使用SQL语句创建数据库、创建数据表等。数据库结构上的某些操作最好不要使用大于0的值来判断操作是否成功。

    这里name,phone,address三个变量负责接收了三条数据添加到数据库中,需要注意的是ID文本框其实设置的是禁止输入的,因为在数据库中ID列设为的是主键,属性列里面也要设置标识规范,选择是

    属性列 主键

    下面是添加前与添加后的对比

    添加前的数据库
    执行添加语句:
    添加成功
    使用查询语句看一下:
    哈哈哈已经添加进去

    消息返回:1 行受影响(这里1即是返回值)

    int num = command.ExecuteNonQuery();
                    if (num > 0)
                    {
                        MessageBox.Show("新增成功");
                    }
                    else
                    {
                        MessageBox.Show("新增失败");
                    }
    

    所以这里num等于ExecuteNonQuery()方法的返回值,如果添加成功返回值肯定为1
    所以下面的判断语句就是如果num>0则以窗体形式弹出新增成功,否则就是新增失败。


    image.png

    以上功能都限于文本框和新增按钮


    取消

    这里的取消按钮还需要添加一些清空文本框的功能:

     //清空值
                textname.Text = "";
                textphone.Text = "";
                textaddress.Text = "";
    

    以上就是添加数据的功能

    删除功能:
    先看一下我设计的删除界面:

    删除界面
    //获取对应的值
                string id= shanchuid.Text;//ID
                string connStr = "Data Source=花伤情犹在;Initial Catalog=AddressList;Integrated Security=True";
                SqlConnection conn = new SqlConnection(connStr);
                conn.Open();//打开数据库
                if (conn.State == ConnectionState.Open)//如果数据库是打开状态
                {
                    //访问数据
                    string sql = "delete Linkinfo where linkid='"+id+"'";
                    SqlCommand command = new SqlCommand(sql, conn);
                    int num = command.ExecuteNonQuery();
                    if (num > 0)
                    {
                        MessageBox.Show("删除成功");
                    }
                    else
                    {
                        MessageBox.Show("删除失败");
                    }
                    conn.Close();
                }
    

    string id= shanchuid.Text;(首先获取文本框的ID值,把它赋值给id)
    delete Linkinfo where linkid='"+id+"'(这就一条普通的Sql Server删除语句,里面是删除条件,如果条件满足,就会删除那一行的数据,删除条件的参数用id代替)
    这样就能实现你想删除哪一行数据就删哪一行
    ExecuteNonQuery()方法仍然是像上面添加数据一样的,当你执行删除语句后会有返回值


    删除前

    删除后会有返回值,因为只删了一行,返回值肯定为1


    执行删除语句后
    再次查询
    查询结果
    可以看到刚才那一列已经被删除
    所以这段判断语句:
    int num = command.ExecuteNonQuery();
                    if (num > 0)
                    {
                        MessageBox.Show("删除成功");
                    }
                    else
                    {
                        MessageBox.Show("删除失败");
                    }
                    conn.Close();
                }
    

    如果>0肯定就是执行成功了,这里以窗体形式提醒删除成功
    否则就以窗体形式提醒删除失败

    以上就是删除功能的实现

    修改功能:
    还是先看一下我设计的窗体界面:

    窗体界面

    这里可以看到修改的功能和添加功能几乎都是一样的,但是有一点不同是,修改功能可以输入ID,而添加功能里面ID是不可以输入的,因为系统会默认分配的

     //获取对应的值
                string id = one.Text;//ID
                string name = two.Text;//姓名
                string phone = three.Text;//手机号
                string address = four.Text;//地址
                string connStr = "Data Source=花伤情犹在;Initial Catalog=AddressList;Integrated Security=True";
                SqlConnection conn = new SqlConnection(connStr);
                conn.Open();//打开数据库
                if (conn.State == ConnectionState.Open)//如果数据库是打开状态
                {
                    //访问数据
                    string sql = string.Format("update Linkinfo set linkname='{0}',linkphone='{1}',address='{2}' where linkid='{3}'",name,phone,address,id);
                    SqlCommand command = new SqlCommand(sql, conn);
                    int num = command.ExecuteNonQuery();
                    if (num > 0)
                    {
                        MessageBox.Show("修改成功");
                    }
                    else
                    {
                        MessageBox.Show("修改失败");
                    }
                    conn.Close();
    

    这里id,name,phone,address四个变量负责接收id,姓名,手机号,地址
    string sql = string.Format("update Linkinfo set linkname='{0}',linkphone='{1}',address='{2}' where linkid='{3}'",name,phone,address,id);
    这个sql语句需要用到string.Format()转义
    至于转义的讲解我画了一张图来解释:

    图解转义.png
    int num = command.ExecuteNonQuery();
                  if (num > 0)
                  {
                      MessageBox.Show("修改成功");
                  }
                  else
                  {
                      MessageBox.Show("修改失败");
                  }
                  conn.Close();
    

    这个判断就不多说了,也是ExecuteNonQuery()方法会有返回值,因为你只修改了一行的数据,如果成功肯定返回1,所以条件判断设为大于1就是修改成功,否则就失败。
    然后这些功能都限于文本框和修改按钮上
    最后要在取消按钮上添加一下清除文本框内容的功能
    以上就是修改功能的实现

    查询功能:

    主界面
    这个查询功能我直接设计在了主界面
    对于这个查询功能我主要用到2种查询方式
    【第一种是查询所有数据】
    【第二种是模糊查询】
     string sousuo = textxm.Text;//文本框输入的内容
                string sql;
                if (sousuo == "")//如果搜索栏为空
                {
                    sql = "select * from Linkinfo";
    
                }
                else
                {
                    sql = string.Format("select * from Linkinfo where linkname like '%{0}%'",sousuo);
                }
    

    对于这两种查询方式我做了一个判断,如果文本框里面什么都不输入,那我的sql语句会被赋值为查询所有数据的语句,如果有内容,就会把我的sql语句赋值为模糊搜索

    然后就是利用Datareader:
    qlDataReader,Read()方法可以读取下一条记录,
    利用while循环重复指令,直到全部记录读取完成

    SqlDataReader dataReader = command.ExecuteReader();//select ExecuteReader
    while (dataReader.Read())//dataReader.Read()==true表示当前下标有记录
                    {
                        //遍历数据库内数据
                        content = content + dataReader["linkid"] + "\t" + "\t" + dataReader["linkname"] + "\t" + "\t" + dataReader["linkphone"] + "\t" + dataReader["address"] + "\r"+"\n";
                    }
    

    最后把遍历的所有内容输出到主界面TextBox上


    输出

    TextBox要设置为ReadOnly为True给它设置为只读

    以上就是整个QQ通讯录增删改查设计思路

    相关文章

      网友评论

        本文标题:C#写QQ通讯录

        本文链接:https://www.haomeiwen.com/subject/lziowktx.html