- A+
所属分类:.NET技术
今天数据库实验是“掌握数据库应用开发的一般方法”,开发环境是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) { } } }
后面就不多说了,一定要先导入程序包,再安装
三、实验
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(); }
结果
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(); }
结果
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("n"); } con.Close(); }
结果
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(); }
结果
5.新增一个学生
方法一
// 新增学生(方法一) // 有点缺陷,因为学号属性是固定的5个字符,这里就用了 if 来判断比较(所以查出来的有空格) // 例如:输入“S02”是找不到的,必须输入“S02 ” static void addOne() { string xh, name, sex, age, xb, sg; // 声明接收学生信息的不同字符串 Console.Write("新增者n学号:"); 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("此学号已存在,请重新输入:n"); 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("新增者n学号:"); 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("此学号已存在,请重新输入:n"); 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("n新增成功!"); } else { System.Console.WriteLine("n新增失败!"); } con.Close(); }