数据库应用开发一、vs

今天数据库实验是“掌握数据库应用开发的一般方法”,开发环境是vs(我这里用的是19版)

一、准备

操作环境:win7以上
DBMS:MySQL 5.5
开发环境:vs19(12及以上都可以)

二、建立工程项目

新建工程后默认模板

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using MySql.Data.MySqlClient;

namespace LiwkerApp
{
    class Program
    {
        static void Main(string[] args)
        
        {
            
        }

        
    }
}

后面就不多说了,一定要先导入程序包,再安装

image-20201207195740829

三、实验

1.随机查询一个学生

static void Main(string[] args)
        {
    		//定义好功能函数后,在main调用
            //show();
            //delOne();
            //Find();
            //showAll();
            //addOne1();
        }

代码

//显示学生的函数
        static void show()
        {
            // 定义一个连接到数据库的字符串
            // 这里连接的是本地服务器(localhost),登录用户名是root,有密码就加
            string conStr = "server=localhost;user=root;database=Liwker;password=1110";

            // 定义一个数据库连接对象con,可以理解它是连接程序连接数据库的通道
            // 这里表明用上面的连接串来建立与目标数据库的连接
            MySqlConnection con = new MySqlConnection(conStr);

            // 连接到数据库,即通常所说的打开数据库
            // 注意如果运行时在这里报错,要么是服务器没启动
            // 要么就是前面的 conStr中的连接信息写错了!
            con.Open();

            // 定义一个S0L命令对象,用于存储给服务器发送的SQL命令及参数等信息
            MySqlCommand cmd = new MySqlCommand();

            // 该SQL命令对象通过con连接到我们的数据库
            cmd.Connection = con;

            // 该SQL命令对象将向服务器发送命令字符串,当然可以使用存储过程等其它类型
            cmd.CommandType = System.Data.CommandType.Text;

            // 编制将要执行的SQL命令,这里命令的功能是随机取回一名学生的姓名和性别
            cmd.CommandText = "select * from student order by rand() limit 1;";

            // 定义一个基于cmd的数据适配器,它专用于接收cmd命令执行后的结果
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            // 定义一个数据集,相当于表的集合, 用于接收SQL命令对象执行后的结果
            DataSet ds = new DataSet();

            // 用适配器执行命令来填充ds数据集,即将取回的数据装入ds
            adapter.Fill(ds);   // 这个方法是有返回值的,返回装入的行数

            // 前面的SQL命令成功取回 学生的信息后会放入ds的tables[0]表的rows[0]行
            // 没有的话,则tables[0]表的rows的行数为0
            if (ds.Tables[0].Rows.Count > 0)
            {
                System.Console.WriteLine("学号: {0}", ds.Tables[0].Rows[0]["学号"]);
                // 显示返回的姓名
                System.Console.WriteLine("姓名: {0}", ds.Tables[0].Rows[0]["姓名"]);
                // 显示返回的性别
                System.Console.WriteLine("性别: {0}", ds.Tables[0].Rows[0]["性别"]);
                System.Console.WriteLine("年龄: {0}", ds.Tables[0].Rows[0]["年龄"]);
                System.Console.WriteLine("系别: {0}", ds.Tables[0].Rows[0]["系别"]);
            }
            else 
            {
                System.Console.WriteLine("目前还没有学生!");
            }

            // 命令用完了,记得关闭连接,以便服务器更好地为其它连接服务
            con.Close();
        }

结果

image-20201207195923638

2.删除学生

代码

// 通过学号删除一个学生
        static void delOne()
        {
            string who; // 存储查找的学号
            Console.Write("删除者学号:");    //输出提示信息
            who = Console.ReadLine();   //接受键盘输入

            // 任何数据库操作,其连接数据库以及SQL命令的准备都是一样的,所以可以直接用下面的
            string conStr = "server=localhost;user=root;database=Liwker;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;

            // 编辑发出给服务器的删除学生的SQL命令,其中@xh是一个参数
            cmd.CommandText = "delete from student where 学号=@xh";

            //提供命令所需要的参数,这里提供刚才输入的学号
            cmd.Parameters.AddWithValue("@xh", who);

            //非查询类的SQL命令的执行用以下方法,返回1 代表成功,0则失败
            int r = cmd.ExecuteNonQuery();
            if(r == 1)
            {
                System.Console.WriteLine("删除成功!");
            }
            else
            {
                System.Console.WriteLine("删除失败,也可能是根本没有此人!");
            }

            // 命令用完了,记得关闭连接,以便服务器更好地为其它连接服务
            con.Close();
        }

        //通过学号查询一个学生的信息
        static void Find()
        {
            string who;
            Console.Write("请输入学号查询:");
            who = Console.ReadLine();

            string conStr = "server=localhost;user=root;database=Liwker;password=1110";    // 连接数据库的字符串
            MySqlConnection con = new MySqlConnection(conStr);  // 定义一个数据库新链接
            con.Open(); // 打开数据库

            MySqlCommand cmd = new MySqlCommand();  // 定义一个新SQL命令
            cmd.Connection = con;   // SQL命令链接到数据库
            cmd.CommandType = System.Data.CommandType.Text; // 发送命令字符串
            cmd.CommandText = "select * from student where 学号=@xh;";    // 写入SQL命令字符串
            cmd.Parameters.AddWithValue("@xh", who);    // 替换参数

            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);   // 定义一个接受cmd对象执行结果的数据适配器
            DataSet ds = new DataSet();     // 定义一个接受SQL对象执行结果的数据集
            adapter.Fill(ds);   // 将适配器里的数据装入ds
            if (ds.Tables[0].Rows.Count > 0)
            {
                System.Console.WriteLine("学号: {0}", ds.Tables[0].Rows[0]["学号"]);
                System.Console.WriteLine("姓名: {0}", ds.Tables[0].Rows[0]["姓名"]);
                System.Console.WriteLine("性别: {0}", ds.Tables[0].Rows[0]["性别"]);
                System.Console.WriteLine("年龄: {0}", ds.Tables[0].Rows[0]["年龄"]);
                System.Console.WriteLine("系别: {0}", ds.Tables[0].Rows[0]["系别"]);
            }
            else
            {
                System.Console.WriteLine("查无此人!");
            }
            con.Close();
        }

结果

image-20201207202410347

3.查询所有学生信息

代码

// 查询所有学生的信息
        static void showAll()
        {
            string conStr = "server=localhost;user=root;database=Liwker;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.CommandText = "select * from student;";
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adapter.Fill(ds);

            // 利用循环来遍历所有的行(学生)
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                System.Console.WriteLine("学号: {0}", ds.Tables[0].Rows[i]["学号"]);
                System.Console.WriteLine("姓名: {0}", ds.Tables[0].Rows[i]["姓名"]);
                System.Console.WriteLine("性别: {0}", ds.Tables[0].Rows[i]["性别"]);
                System.Console.WriteLine("年龄: {0}", ds.Tables[0].Rows[i]["年龄"]);
                System.Console.WriteLine("系别: {0}", ds.Tables[0].Rows[i]["系别"]);
                System.Console.WriteLine("
");
            }

            con.Close();
        }

结果

image-20201207202515284

4.查询单个学生

代码

//通过学号查询一个学生的信息
        static void Find()
        {
            string who;
            Console.Write("请输入学号查询:");
            who = Console.ReadLine();

            string conStr = "server=localhost;user=root;database=Liwker;password=1110";    // 连接数据库的字符串
            MySqlConnection con = new MySqlConnection(conStr);  // 定义一个数据库新链接
            con.Open(); // 打开数据库

            MySqlCommand cmd = new MySqlCommand();  // 定义一个新SQL命令
            cmd.Connection = con;   // SQL命令链接到数据库
            cmd.CommandType = System.Data.CommandType.Text; // 发送命令字符串
            cmd.CommandText = "select * from student where 学号=@xh;";    // 写入SQL命令字符串
            cmd.Parameters.AddWithValue("@xh", who);    // 替换参数

            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);   // 定义一个接受cmd对象执行结果的数据适配器
            DataSet ds = new DataSet();     // 定义一个接受SQL对象执行结果的数据集
            adapter.Fill(ds);   // 将适配器里的数据装入ds
            if (ds.Tables[0].Rows.Count > 0)
            {
                System.Console.WriteLine("学号: {0}", ds.Tables[0].Rows[0]["学号"]);
                System.Console.WriteLine("姓名: {0}", ds.Tables[0].Rows[0]["姓名"]);
                System.Console.WriteLine("性别: {0}", ds.Tables[0].Rows[0]["性别"]);
                System.Console.WriteLine("年龄: {0}", ds.Tables[0].Rows[0]["年龄"]);
                System.Console.WriteLine("系别: {0}", ds.Tables[0].Rows[0]["系别"]);
            }
            else
            {
                System.Console.WriteLine("查无此人!");
            }
            con.Close();
        }

结果

image-20201207202442361

5.新增一个学生

方法一

// 新增学生(方法一)
        // 有点缺陷,因为学号属性是固定的5个字符,这里就用了 if 来判断比较(所以查出来的有空格)
        // 例如:输入“S02”是找不到的,必须输入“S02  ”
        static void addOne()
        {
            string xh, name, sex, age, xb, sg;  // 声明接收学生信息的不同字符串

            Console.Write("新增者
学号:");
            xh = Console.ReadLine();    // 先输入学号,以便判断是否有重复

            // 连接数据库
            string conStr = "server=localhost;user=root;database=Liwker;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;

            // 先获取已有的学生的学号
            cmd.CommandText = "select 学号 from student";
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adapter.Fill(ds);

            // 学号重复判断
            for(int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                if (xh == (string)ds.Tables[0].Rows[i]["学号"])   //加string强制转换
                {
                    Console.Write("此学号已存在,请重新输入:
");
                    xh = Console.ReadLine();
                    i = -1;
                }
            }

            Console.Write("姓名:");
            name = Console.ReadLine();

            Console.Write("性别:");
            sex = Console.ReadLine();

            Console.Write("年龄:");
            age = Console.ReadLine();

            Console.Write("系别:");
            xb = Console.ReadLine();

            Console.Write("身高:");
            sg = Console.ReadLine();

            // 定义SQL插入命令
            cmd.CommandText = "insert into student values(@xh,@name,@sex,@age,@xb,@sg)";
            cmd.Parameters.AddWithValue("@xh", xh);
            cmd.Parameters.AddWithValue("@name", name);
            cmd.Parameters.AddWithValue("@sex", sex);
            cmd.Parameters.AddWithValue("@age", age);
            cmd.Parameters.AddWithValue("@xb", xb);
            cmd.Parameters.AddWithValue("@sg", sg);
            int r = cmd.ExecuteNonQuery();  // 非查询类SQL命令的返回(0 或 1)
            if (r == 1)
            {
                System.Console.WriteLine("新增成功!");
            }
            else
            {
                System.Console.WriteLine("新增失败!");
            }

            con.Close();
        }

方法二

// 新增学生(方法二)
        // 此方法就不存在空格问题
        // 每输入学号就会运行SQL查看有没有重复的
        static void addOne1()
        {
            string xh, name, sex, age, xb, sg;
            int f = 0;  // 定义一个标志,以便后面判断重复

            Console.Write("新增者
学号:");
            xh = Console.ReadLine();

            // 连接数据库
            string conStr = "server=localhost;user=root;database=Liwker;password=1110";
            MySqlConnection con = new MySqlConnection(conStr);
            con.Open();

            // 学号重复判断
            do
            {
                // 先来判断是否有重复
                if (f != 0)
                {
                    Console.Write("此学号已存在,请重新输入:
");
                    xh = Console.ReadLine();
                }
                // 定义一个新的SQL命令
                MySqlCommand cmd1 = new MySqlCommand();
                cmd1.Connection = con;
                cmd1.CommandType = System.Data.CommandType.Text;

                // 定义查询这个学号是否重复的SQL命令
                cmd1.CommandText = "select * from student where 学号=@xh";
                cmd1.Parameters.AddWithValue("@xh", xh);
                MySqlDataAdapter adapter = new MySqlDataAdapter(cmd1);
                DataSet ds = new DataSet();
                f = adapter.Fill(ds);   // f接受行数,0为没有,n为有n行数据
            } while (f > 0);    // 一直循环到没有重复为止


            Console.Write("姓名:");
            name = Console.ReadLine();

            Console.Write("性别:");
            sex = Console.ReadLine();

            Console.Write("年龄:");
            age = Console.ReadLine();

            Console.Write("系别:");
            xb = Console.ReadLine();

            Console.Write("身高:");
            sg = Console.ReadLine();

            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = con;
            cmd.CommandType = System.Data.CommandType.Text;
            // 定义SQL插入命令
            cmd.CommandText = "insert into student values(@xh,@name,@sex,@age,@xb,@sg)";
            cmd.Parameters.AddWithValue("@xh", xh);
            cmd.Parameters.AddWithValue("@name", name);
            cmd.Parameters.AddWithValue("@sex", sex);
            cmd.Parameters.AddWithValue("@age", age);
            cmd.Parameters.AddWithValue("@xb", xb);
            cmd.Parameters.AddWithValue("@sg", sg);
            int r = cmd.ExecuteNonQuery();  // 非查询类SQL命令的返回(0 或 1)
            if (r == 1)
            {
                System.Console.WriteLine("
新增成功!");
            }
            else
            {
                System.Console.WriteLine("
新增失败!");
            }

            con.Close();
        }

结果

image-20201207202612467

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注