使用ADO.NET访问数据库,首先就是要建立与数据库的连接。在学习的过程中,发现整个小软件要做很多次与数据库的连接和断开。所以这部分是最基础的内容。
连接数据库,主要是使用SqlConnection类,创建该类的对象,用open()方法即可打开与数据库的连接。在连接中,要注意的就是创建SqlConnection对象时的连接字符。
一、准备工作
1、首先电脑要有MySQL、Visual Studio、第三方工具
2、新建一个winform窗体应用
3、添加应用
右键点击右侧的依赖项,选择管理NuGet程序包,选择浏览,造搜索框搜索MySql.Data.EntityFrameworkCore,点击安装
4、进行winform的界面设置
二、新建设置MySql方法的类
一般的编程操作是,不要把左右的代码都放在同一个main函数中,我们新建一个类,将MySQL用到的方法放到里面,然后新建两个数据库的类,用来创建数据库文件。
我们在项目头文件上右键添加–>新建文件夹,重命名为MySQL,用来放所有与数据库有关的类。
在文件夹上右键添加–>新建类创建三个类,三各类全部添加public关键字,方便外部的类进行调用。
我设置的三个类名字分别为data1、data2、MyDbContext,
其中data1和data2分别代表两个数据库,MyDbContext用来放置用于连接数据库的方法
以下是三个类的代码:
类1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Csharp操作MySQL.MySQL
{
public class data1
{
/// <summary>
/// 添加键值,默认名称是id,数据类型为int
/// </summary>
public int id { get; set; }
/// <summary>
/// 文本数据
/// </summary>
public string text { get; set; }
}
}
类2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Csharp操作MySQL.MySQL
{
public class Data2
{
/// <summary>
/// 键值
/// </summary>
public int id { get; set; }
/// <summary>
/// 数据
/// </summary>
public string text { get; set; }
}
}
类3:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Csharp操作MySQL.MySQL;
using Microsoft.EntityFrameworkCore.Infrastructure;
namespace Csharp操作MySQL.MySQL
{
public class MyDbContext : DbContext
{
/// <summary>
/// 添加表tb_data1
/// </summary>
public DbSet<data1> tb_data1 { get; set; }
/// <summary>
/// 添加表tb_data2
/// </summary>
public DbSet<Data2> tb_data2 { get; set; }
//连接到数据库
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
//连接信息
string sql = @"Server = 127.0.0.1; port=3306; Database=test1; User=root; Password=123456; CharSet=utf8; ";
optionsBuilder.UseMySQL(sql);
}
}
//数据模式回调
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
}
FromMain函数的编程:
using Csharp操作MySQL.MySQL;
using Microsoft.EntityFrameworkCore;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Csharp操作MySQL
{
public partial class Form1 : Form
{
//MyDbContext类的实例化对象
MyDbContext mydb = new MyDbContext();
public Form1()
{
//组件初始化
InitializeComponent();
//数据库初始化
InitMySql();
}
/// <summary>
/// 初始化数据库
/// </summary>
private void InitMySql()
{
mydb.Database.EnsureCreated();
}
/// <summary>
/// 读取数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//读取有两种方式
//第一种是使用建立的类MyDbConnect
//List<data1> datas = mydb.tb_data1.ToList(); //读取tb_data1表中的数据到data
//dataGridView1.Rows.Clear(); //清除控件dataGridView1中的行数据
//foreach (data1 d in datas)
//{
// int addr = 0;
// int index = dataGridView1.Rows.Add();
// dataGridView1.Rows[index].Cells[addr++].Value = d.id;
// dataGridView1.Rows[index].Cells[addr++].Value = d.text;
//}
//第二种是直接建立连接,这种方式不需要使用MyDbConnect
string sql = @"SELECT * FROM tb_data1";
string constr = @"Server = 127.0.0.1; port=3306; Database=test1; User=root; Password=123456; CharSet=utf8; ";
//连接到数据库
MySqlConnection sqlCon = new MySqlConnection(constr);
sqlCon.Open();
//执行sql命令
MySqlCommand sqlCmd = new MySqlCommand(sql, sqlCon);
MySqlDataAdapter ad = new MySqlDataAdapter(sqlCmd);
DataSet ds = new DataSet();
ad.Fill(ds);
ds.Dispose();
提取读取到的数据
//DataView data = ds.Tables[0].DefaultView;
//dataGridView1.Rows.Clear(); //清除控件dataGridView1中的行数据
//foreach (DataRowView d in data)
//{
// int addr = 0;
// int index = dataGridView1.Rows.Add();
// dataGridView1.Rows[index].Cells[addr++].Value = d[0].ToString();
// dataGridView1.Rows[index].Cells[addr++].Value = d[1].ToString();
//}
//第三种是直接给表dataGridView1赋值(接着上面的代码)
dataGridView1.Columns.Clear(); //清除所有表格
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
/// <summary>
/// 写入数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[Obsolete]
private void button2_Click(object sender, EventArgs e)
{
写入数据有两种形式
第一种:调用全局变量
//string text = textBox1.Text;
//data1 a = new data1() { text = text };
添加数据
//mydb.tb_data1.Add(a);
保存数据,如果修改成功,则返回一个大于0的数,否则返回0
//mydb.SaveChanges();
//快速注释:ctrl+k+c 撤回快速注释:ctrl+k+u
//第二种:直接执行MySQL语句
using (MyDbContext db = new MyDbContext())
{
string sql = @"INSERT INTO tb_data1 SET text = @data";
db.Database.ExecuteSqlCommand(sql, new MySqlParameter("@data", textBox1.Text));
}
//及逆行万操作之后在界面刷新表格
button1_Click(null, null);
}
/// <summary>
/// 删除操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
MyDbContext mdb = new MyDbContext();
data1 data = mdb.tb_data1.FirstOrDefault(x => x.id == int.Parse(textBox2.Text));
if (data != null) mdb.tb_data1.Remove(data);
mdb.SaveChanges();
button1_Click(null, null);
}
/// <summary>
/// 修改数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
MyDbContext mdb = new MyDbContext();
data1 data = mdb.tb_data1.FirstOrDefault(x => x.id == int.Parse(textBox2.Text));
if (data != null) data.text = textBox1.Text;
mdb.SaveChanges();
button1_Click(null, null);
}
}
}