C#对MySQL的增删改查

目录

一、前期准备

二、ExecuteNonQuery()

三、ExecuteScalar()

四、ExecuteReader()

五、MySqlDataReader_读数据流的使用

例程一、List应用

例程二、DataTable应用


涉及知识点:  C#对MySQL 小数据的增删改查

一、前期准备

1、配置App.config文件  -- 若文件未找到,则 Ctrl+Shift+A --> 添加 " 应用程序配置文件 " 

	
		
	

2、导入Nuget包  

 3、引入using

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;

4、创建MySQL 数据表  

create table tb_student_information
(
    id int,
    name varchar(10),
    no int
);

二、ExecuteNonQuery()

概念: 

 sql语句执行,并返回受影响的行数 — 适用:插入、修改、删除 – 不适用:查询
int count = cmd.ExecuteNonQuery();

修改前数据库数据:

C#对MySQL的增删改查_第1张图片

 C#操作MySQL  -- C#代码

 internal class Program
{
    static void Main(string[] args)
    {
        string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        using (MySqlConnection connect = new MySqlConnection(connStr))
        {
            string sql = "insert into tb_student_information(id,name,no) values (1,'小黄',20);";
            MySqlCommand cmd = new MySqlCommand(sql, connect);

            connect.Open();
            //sql语句执行,并返回受影响的行数   --- 适用:插入、修改、删除  -- 不适用:查询
            int count = cmd.ExecuteNonQuery();
            Console.WriteLine(count);
            connect.Close();
        }
        Console.WriteLine("Hello World!");
    }
}

结果: 

C#对MySQL的增删改查_第2张图片

 C#对MySQL的增删改查_第3张图片

三、ExecuteScalar()

概念:

//sql语句执行,并返回第一行的第一列数据— 适用:查询一条数据
object obj = cmd.ExecuteScalar();

修改前数据库数据:

C#对MySQL的增删改查_第4张图片

 C#操作MySQL  -- C#代码

 internal class Program
    {
        static void Main(string[] args)
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

            using (MySqlConnection connect = new MySqlConnection(connStr))
            {
                string sql = "select * from tb_student_information;";
                MySqlCommand cmd = new MySqlCommand(sql, connect);
                connect.Open();
                //sql语句执行,并返回第一行的第一列数据--- 适用:查询一条数据
                object obj = cmd.ExecuteScalar();
                Console.WriteLine(obj.ToString());
                connect.Close();
            }
            Console.WriteLine("Hello World!");
        }
    }

结果:  

C#对MySQL的增删改查_第5张图片

 C#对MySQL的增删改查_第6张图片

四、ExecuteReader()

概念:

sql语句执行,并返回读数据流 --- 适用: 查询小量数据
connect连接使用原则:最晚打开,最早关闭
注:用于大量数据时,会卡在这很长时间,故大量数据时不推荐使用
读取中需一直处于打开状态
CommandBehavior.CloseConnection — dr.Close() / connect.Close() 两个用其一即可
MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

修改前数据库数据:

C#对MySQL的增删改查_第7张图片

MySQL数据库添加数据  -- MySQL代码 

insert into tb_student_information
values (2,'小白',25),
       (3,'小红',30),
       (4,'小兰',35);

C#操作MySQL  -- C#代码 

    internal class Program
    {
        static void Main(string[] args)
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

            using (MySqlConnection connect = new MySqlConnection(connStr))
            {
                string sql = "select * from tb_student_information;";
                MySqlCommand cmd = new MySqlCommand(sql, connect);
                connect.Open();
                MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (dr.Read())
                {
                    Console.WriteLine(dr[0].ToString() + " "
                                    + dr[1].ToString() + " "
                                    + dr[2].ToString());
                }
            }
            Console.WriteLine("Hello World!");
        }
    }

结果:  

C#对MySQL的增删改查_第8张图片

五、MySqlDataReader_读数据流的使用

特点:  只读,遍历访问每一行数据的数据流,向一个方向,一行一行的

缺点:  不灵活,只适合数据小的情况,读取数据,一直占用连接

读取方式:Read()获取第一行的数据,再次调用Read()方法获取下一行,当调用Read()方法返回false时,就表示不再有有效数据行

创建方式:  不能直接构造, cmd.ExecuteReader()来创建

注意
 1、连接对象一直保持Open状态,不用时需要Close()关闭,不然会一直占用连接
 2、cmd.ExecuteReader(CommandBehaviour.CloseConnection) -- 好处: 关闭reader对象时,就会自动关闭连接。
 3、类型一一对应,尽量减少类型转换
 4、在没有读取到末尾就结束read(),需先调用cmd.Cancel(),然后再调用reader.Close();
 5、cmd.ExecuteReader()获取存储过程的返回值或输出参数,先调用reader.Close(),然后才能获取参数的值

常用属性:
 Connection: 获取与Reader对象相关的MySqlConnection
 FiedCount: 当前行中的列数
 HasRows: reader是否包含一行还是多行
 IsClosed: reader状态是否关闭
 Item[int]: 获取指定列的值  dr[2]
 Item[String]: 获取指定列的值 dr["id"]

常用方法:
Close()  关闭dr
GetInt32(列序号) -- 根据数据类型获取相匹配的方法
GetFieldType(i)  -- 获取数据的类型
GetName(列序号)  -- 获取指定列的列名
GetOrdinal(列号) -- 获取指定列名的列序号
Read()           -- 使dr前进到下一条记录
NextResult()     -- 使dr前进到下一个记录
DataTable dt = new DataTable();
dt.Load(dr);     -- 加载到表格

例程一、List应用

修改前数据库数据:

C#对MySQL的增删改查_第9张图片

C#操作MySQL  -- C#代码 

internal class Program
{
    static void Main(string[] args)
    {
        //获取外部文件字符串
        string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

        string sql = "select tb.id,tb.name,tb.no from tb_student_information as tb;";

        using (MySqlConnection connect = new MySqlConnection(connStr))
        {
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            connect.Open();
            MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            List list = new List();
            if (dr.HasRows) //若有值
            {
                int indexId = dr.GetOrdinal("id");  //根据列名获取下标
                string indexName = dr.GetName(1);     //根据下标获取列名
                int indexNo = dr.GetOrdinal("no");
                while (dr.Read())
                {
                    Student student = new Student();
                    student.Id = dr.GetInt32(indexId); //获取id的值避免类型转换
                    student.Name = dr.GetString(indexName);
                    student.No = dr.GetInt32(indexNo);

                    list.Add(student);
                }
            }
            foreach (Student item in list) //遍历显示
            {
                Console.WriteLine($"id:{item.Id} name:{item.Name} no:{item.No}");
            }
        }
        Console.WriteLine("Hello World!");
    }
}
internal class Student
{
    public int Id { set; get; }
    public string Name { set; get; }
    public int No { set; get; }
}

结果:  

C#对MySQL的增删改查_第10张图片

例程二、DataTable应用

修改前数据库数据:

C#对MySQL的增删改查_第11张图片

C#操作MySQL  -- C#代码 

    internal class Program
    {
        static void Main(string[] args)
        {
            //获取外部文件字符串
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

            string sql = "select tb.id,tb.name,tb.no from tb_student_information as tb;";

            using (MySqlConnection connect = new MySqlConnection(connStr))
            {
                MySqlCommand cmd = new MySqlCommand(sql, connect);
                connect.Open();
                MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                DataTable dt = new DataTable();

                int indexId = dr.GetOrdinal("id");  //根据列名获取下标
                string indexName = dr.GetName(1);     //根据下标获取列名
                int indexNo = dr.GetOrdinal("no");
                if (dr.HasRows) //若有值
                {
                    dt.Load(dr);
                }
                connect.Close();

                foreach (DataRow row in dt.Rows)  //遍历显示
                {
                    Console.WriteLine($"id:{row[indexId]} name:{row[indexName]} no:{row[indexNo]}");
                }

            }
            Console.WriteLine("Hello World!");
        }
    }

结果:  

C#对MySQL的增删改查_第12张图片


如有错误,烦请批评指正

你可能感兴趣的:(ADO.net,数据库,c#,mysql)