今天数据库实验是“掌握数据库应用开发的一般方法”,开发环境是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("
");
}
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("新增者
学号:");
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();
}