创建数据库
首先要在Navicat软件创建出一个如下图所示的数据库(如果不了解请去看上一篇文章<<MYSQl数据库详细知识点和在Navicat中的具体操作>>)

创建 Winform 项目并设计界面

添加Mysql程序集


编写代码实现切换逻辑
using MySql.Data.MySqlClient;//1.导入Mysql程序集
using System;
using System.Data;
using System.Windows.Forms;
namespace _01MySQl联合编程
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 核心字段:MySQL数据库连接对象(全局唯一,用于整个窗体的数据库交互)
// MySqlConnection:MySQL官方提供的连接类,负责与数据库建立/断开连接
MySqlConnection conn = null;
//连接数据库点击事件
private void button1_Click(object sender, EventArgs e)
{
// try-catch异常捕获:处理数据库连接中可能出现的错误
try
{
//先定义连接数据库所需要的信息
// server:数据库服务器地址(localhost=本地服务器)
// port:MySQL端口号(默认3306)
// user:数据库登录用户名(默认root)
// password:数据库登录密码(默认root)
// database:要操作的目标数据库名(此处为school数据库)
// charset:字符编码(utf8确保中文不出现乱码)
string connStr = "server=localhost;port=3306;user=root;password=root;database=school;charset = utf8";
//实例化连接对象:传入连接字符串初始化连接配置
conn = new MySqlConnection(connStr);
//打开数据库连接(实际建立与MySQL服务器的网络连接)
conn.Open();
//判断连接状态:ConnectionState.Open表示连接成功
if (conn.State == ConnectionState.Open)
{
MessageBox.Show("Mysql连接成功");
// 连接成功后,启用"关闭连接"和"查询"按钮(初始为禁用状态)
button2.Enabled = true;
button3.Enabled = true;
}
}
catch (Exception ex)
{
MessageBox.Show("Mysql连接失败" + ex.Message);
}
}
//关闭数据库连接点击事件
private void button2_Click(object sender, EventArgs e)
{
try
{
//先判断连接对象是否不为空
if (conn != null)
{
// 关闭数据库连接
conn.Close();
// 判断连接状态:ConnectionState.Closed表示关闭成功
if (conn.State == ConnectionState.Closed)
{
MessageBox.Show("Mysql关闭成功");
// 关闭成功后,禁用"关闭连接"和"查询"按钮
button2.Enabled = false;
button3.Enabled = false;
}
}
}
catch (Exception ex)
{
MessageBox.Show("Mysql关闭失败" + ex.Message);
}
}
//查询数据库点击事件--学生表
private void button3_Click(object sender, EventArgs e)
{
try
{
//获取用户输入的表名
string tableName = textBox1.Text;
//构建查询SQL语句:select * from 表名(查询表中所有数据)
string sql = "select * from " + tableName;
//执行查询:使用MySqlHelper工具类的ExecuteReader方法
// MySqlDataReader:数据读取器(流式读取查询结果,只能向前读取)
// 参数1:已打开的数据库连接对象conn;参数2:查询SQL语句
MySqlDataReader reader = MySqlHelper.ExecuteReader(conn, sql);
//拼接查询结果字符串
string str = "";
// 循环读取数据:reader.Read()返回true表示有下一条数据
while (reader.Read())
{
// reader.FieldCount:获取当前查询结果的字段总数
// 循环遍历每个字段,拼接字段值(\t是制表符,用于对齐显示)
for (int i = 0; i < reader.FieldCount; i++)
{
str += reader[i].ToString() + "\t";
}
str += "\n";
//str += reader[0].ToString() + "\t"+ reader[1].ToString() + "\n";
}
MessageBox.Show(str);
//关闭数据读取器
reader.Close();
}
catch (Exception ex)
{
MessageBox.Show("查询失败" + ex.Message);
}
}
//窗体加载事件
private void Form1_Load(object sender, EventArgs e)
{
// 初始状态禁用"关闭连接"和"查询"按钮
button2.Enabled = false;
button3.Enabled = false;
}
//插入数据
private void button4_Click(object sender, EventArgs e)
{
try
{
// 获取用户输入的参数
string tableName = textBox1.Text; // 目标表名(如"student")
string id = textBox2.Text; // 学生ID(对应数据库id字段,主键不可重复)
string sname = textBox3.Text; // 学生姓名(对应数据库sname字段,字符串类型)
string age = textBox4.Text; // 学生年龄(对应数据库age字段,整数类型)
string address = textBox5.Text; // 学生地址(对应数据库address字段,字符串类型)
string sex = textBox6.Text; // 学生性别(对应数据库sex字段,字符串类型)
// 构建插入SQL语句(核心:字段名与值必须一一对应)
// 格式:insert into 表名 (字段1,字段2,...) values (值1,值2,...)
// 注意:
// 1. 字符串类型的值必须用单引号''包裹(如'sname'),否则会报语法错误
// 2. 整数类型的值无需加单引号(如age)
// 3. 字段顺序必须与values中的值顺序一致
string sql = "insert into " + tableName + " (id, sname, age, address, sex) " + "values (" + id + ", \'" + sname + "\', " + age + ", \'" + address + "\', \'" + sex + "\')";
//执行插入操作:使用MySqlHelper的ExecuteNonQuery方法
// 该方法返回值:受影响的行数(插入成功返回1,失败返回0)
int number = MySqlHelper.ExecuteNonQuery(conn, sql);
//判断插入结果:受影响行数>0表示插入成功
if (number > 0)
{
MessageBox.Show("数据插入成功");
}
else
{
MessageBox.Show("数据插入失败");
}
}
catch (Exception ex)
{
// 捕获插入异常:
// 1. 主键冲突(id已存在);2. 字段类型不匹配(如age输入非数字);
// 3. 字符串未加单引号;4. 字段数量与值数量不匹配等
MessageBox.Show("数据插入失败" + ex.Message);
}
}
//修改部门信息
private void button5_Click(object sender, EventArgs e)
{
try
{
string tableName = textBox1.Text;//学生表
string id = textBox2.Text;//学生id
string sname = textBox3.Text;//学生姓名
string age = textBox4.Text;//学生年龄
string address = textBox5.Text;//学生学校
string sex = textBox6.Text;//学生性别
//构建修改SQL语句(核心:必须加where条件,否则会修改全表数据!)
// 格式:update 表名 set 字段1=值1, 字段2=值2,... where 条件
// 注意:
// 1. set后多个字段用逗号分隔;2. where条件必须明确(如id=xxx),避免批量修改;
// 3. 字符串类型值加单引号,整数类型不加;4. 字段名必须与数据库一致
string sql = "update " + tableName + " set sname='" + sname + "', age=" + age + ", address='" + address + "', sex='" + sex + "' where id=" + id;
//执行修改操作:ExecuteNonQuery返回受影响的行数(修改成功返回1,无匹配数据返回0)
int number = MySqlHelper.ExecuteNonQuery(conn, sql);
//判断修改结果
if (number > 0)
{
MessageBox.Show("数据更新成功");
}
else
{
MessageBox.Show("数据更新失败");
}
}
catch (Exception ex)
{
MessageBox.Show("数据更新失败" + ex.Message);
}
}
//删除数据
private void button6_Click(object sender, EventArgs e)
{
try
{
// 获取用户输入的参数(删除条件+目标表名)
string tableName = textBox1.Text; // 目标表名(如"student")
string id = textBox2.Text; // 删除条件:学生ID(主键,确保只删除一条数据)
// 构建删除SQL语句(核心:必须加where条件,否则会删除全表数据!)
// 格式:delete from 表名 where 条件
// 注意:where条件必须明确(如id=xxx),否则会导致数据全部丢失!
string sql = "delete from " + tableName + " where id=" + id;
//执行插入操作 ExecuteNonQuery返回受影响的行数(删除成功返回1,无匹配数据返回0)
int number = MySqlHelper.ExecuteNonQuery(conn, sql);
if (number > 0)
{
MessageBox.Show("数据删除成功");
}
else
{
MessageBox.Show("数据删除失败");
}
}
catch (Exception ex)
{
MessageBox.Show("数据删除失败" + ex.Message);
}
}
}
}
效果演示

希望对大家有所帮助。感谢大家的关注和点赞。

3489

被折叠的 条评论
为什么被折叠?



