Winform链接数据库

本文详细介绍了如何在C#中使用ADO.NET和EntityFramework访问MySQL数据库,包括建立连接、创建数据类、数据库操作(插入、查询、删除和修改)以及使用MyDbContext类进行数据库操作的封装。
摘要由CSDN通过智能技术生成

    使用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);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值