MySqlDataAdapter桥接器的使用

本文介绍了如何使用C#的MySqlDataAdapter进行数据库操作,包括填充DataSet、自动和手动更新数据到MySQL数据库,涉及修改、添加和删除数据的详细步骤,并展示了相关C#代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、前期准备

二、MySqlDataAdapter概念

三、MySqlDataAdapter的创建与使用

四、MySqlDataAdapter.Updata() -- 自动生成

1、修改数据到数据库  

2、添加数据到数据库  

3、删除数据到数据库

五、MySqlDataAdapter.Updata()  -- 手动生成

1、修改数据到数据库

2、添加数据到数据库 

3、删除数据到数据库 


涉及知识点:MySqlTable的遍历 -- MySqlDataAdapter.Updata 

一、前期准备

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

	<connectionStrings>
		<add name="connStr"
		     connectionString="server=localhost;database=mysql_student;uid=root;pwd=123456"
			 providerName="MySql.Data.MySqlClient"/>
	</connectionStrings>

2.安装Nuget包

 3.引用相关using

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

4、创建MySQL 数据表 

create table tb_user
(
    user_id   int  primary key,
    user_name varchar(10),
    user_age  int,
    dept_id  int
);
insert into tb_user(user_id, user_name, user_age, dept_id)
            values(1,'小王',24,1),
                  (2,'小白',22,2),
                  (3,'小冰',19,2);
create table tb_dept
(
    dept_id   int  primary key,
    dept_name varchar(10)
);
insert into tb_dept(dept_id, dept_name)
            values(1,'老板'),
                  (2,'员工');

二、MySqlDataAdapter概念

概念:
        MySqlDataAdapter(桥接器): DataSet数据之间用于检索和保存数据的桥梁

应用: 
         1、Fill填充到DataSet里
         2、Updata更改提交到数据库 数据保存一致
         3、MySqlConnection SqlCommand 一起使用,提高访问速度

4个重要属性
         1、SelectCommand    -- 查询
         2、InsertCommand     -- 插入
         3、UpdataCommand  -- 更新
         4、DeleteCommand   -- 删除

Fill填充数据两种机制
         1、断开式:Fill内部自动打开和关闭connect
         2、连接式:手动配置 connect.Open() 和 connect.Close()
                             -- 推荐(因为速度快)
                             -- 打开必须关闭,他不会自动关闭
     !!! MySqlDataAdapter 对数据的操作也是建立在MySqlCommand 之上的

三、MySqlDataAdapter的创建与使用

修改前数据库数据:

   C#对MySQL的操作: -- C#代码 

 internal class Program
    {
        static void Main(string[] args)
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            string sql = "select * from tb_user; select * from tb_dept;";

            MySqlConnection connect = new MySqlConnection(connStr);

            //Adapter创建方法一  -- 有参时推荐
            MySqlDataAdapter adapter1 = new MySqlDataAdapter();
            adapter1.SelectCommand = new MySqlCommand(sql, connect);
            //Adapter创建方法二  -- 有参时推荐
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter2 = new MySqlDataAdapter(cmd);
            //Adapter创建方法三  -- 无参时推荐
            MySqlDataAdapter adapter3 = new MySqlDataAdapter(sql, connect);
            //Adapter创建方法四  -- 不推荐(内部运算太大,速度慢)
            MySqlDataAdapter adapter4 = new MySqlDataAdapter(sql, connStr);

            //填充数据一  -- 多个表
            DataSet ds = new DataSet();
            adapter3.TableMappings.Add("Table", "User"); //修改表名
            adapter3.TableMappings.Add("Table1", "Dept"); //修改表名
            adapter3.Fill(ds);

            //遍历 ds 数据库
            foreach (DataTable table in ds.Tables)
            {
                //显示表名
                Console.WriteLine(table.TableName);
                //遍历显示列名
                for (int i = 0; i < table.Columns.Count; i++)
                {
                    Console.Write($"{table.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in table.Rows)
                {
                    for (int i = 0; i < table.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            Console.WriteLine("---------------------------");
            //填充数据二 -- 单个表
            DataTable dt = new DataTable("User1");
            connect.Open();
            adapter2.Fill(dt);
            connect.Close();

            //遍历 dt 单个表
            {
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示:

四、MySqlDataAdapter.Updata() -- 自动生成

1、修改数据到数据库  

 修改前数据库数据:

  C#对MySQL的操作: -- C#代码

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

            MySqlConnection connect = new MySqlConnection(connStr);
            //Adapter创建方法
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            //自动生成对应的Command命令
            MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
            DataTable dt = new DataTable("user");

            //填充数据单个表
            connect.Open();
            adapter.Fill(dt);
            connect.Close();

            //遍历 修改前数据
            {
                Console.WriteLine("-----修改前数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            //数据修改
            dt.Rows[0]["user_age"] = 18;

            //!!!所查询的表必须有主键,否则保错!!!
            adapter.Update(dt);

            //遍历 修改前数据
            {
                Console.WriteLine("-----修改后数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示: 


2、添加数据到数据库  

  修改前数据库数据:

  

 C#对MySQL的操作: -- C#代码

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

            MySqlConnection connect = new MySqlConnection(connStr);
            //Adapter创建方法
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            //自动生成对应的Command命令
            MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
            DataTable dt = new DataTable("user");

            //填充数据单个表
            connect.Open();
            adapter.Fill(dt);
            connect.Close();

             //遍历 添加前数据
            {
                Console.WriteLine("-----添加前数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            //添加新行
            DataRow dr = dt.NewRow();
            dr["user_id"] = 4;
            dr["user_name"] = "小粉";
            dr["user_age"] = 19;
            dr["dept_id"] = 2;
            dt.Rows.Add(dr);

            //!!!所查询的表必须有主键,否则保错!!!
            adapter.Update(dt);

            //遍历 添加后数据
            {
                Console.WriteLine("-----添加后数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示: 

3、删除数据到数据库

  修改前数据库数据:

  C#对MySQL的操作: -- C#代码 

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

            MySqlConnection connect = new MySqlConnection(connStr);
            //Adapter创建方法
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            //自动生成对应的Command命令
            MySqlCommandBuilder builder = new MySqlCommandBuilder(adapter);
            DataTable dt = new DataTable("user");

            //填充数据单个表
            connect.Open();
            adapter.Fill(dt);
            connect.Close();

            //遍历 删除前数据
            {
                Console.WriteLine("-----删除前数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            //删除一行
            dt.Rows[3].Delete();

            //!!!所查询的表必须有主键,否则保错!!!
            adapter.Update(dt);

            //遍历 删除后数据
            {
                Console.WriteLine("-----删除后数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示: 

五、MySqlDataAdapter.Updata()  -- 手动生成

1、修改数据到数据库

修改前数据库数据:

C#对MySQL的操作: -- C#代码 

                !!!不可以一次性修改整行数据!!!

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

            MySqlConnection connect = new MySqlConnection(connStr);
            //Adapter创建方法
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            DataTable dt = new DataTable("user");

            //填充数据单个表
            connect.Open();
            adapter.Fill(dt);
            connect.Close();

            //遍历 修改前数据
            {
                Console.WriteLine("-----修改前数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            dt.Rows[2]["user_id"] = 3;
            dt.Rows[2]["user_name"] = "小秀";
            dt.Rows[2]["user_age"] = 20;
            dt.Rows[2]["dept_id"] = 1;

            //不可以一次性修改整行数据
            string updataSql = "update tb_user set user_name = @name, user_age = @age, dept_id = @dept_id where user_id = @user_id ;";
            MySqlCommand updataCmd = new MySqlCommand(updataSql, connect);
            MySqlParameter[] parameters = new MySqlParameter[]
            {
                new MySqlParameter("@name",MySqlDbType.VarChar,10,"user_name"),
                new MySqlParameter("@age",MySqlDbType.Int32,4,"user_age"),
                new MySqlParameter("@dept_id",MySqlDbType.Int32,4,"dept_id"),
                new MySqlParameter("@user_id",MySqlDbType.Int32,4,"user_id"),
            };

            updataCmd.Parameters.Clear(); //防止原有数据未清
            updataCmd.Parameters.AddRange(parameters);
            adapter.UpdateCommand = updataCmd;

            //!!!所查询的表必须有主键,否则保错!!!
            adapter.Update(dt);

            //遍历 修改后数据
            {
                Console.WriteLine("-----修改后数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示: 

2、添加数据到数据库 

修改前数据库数据:

 C#对MySQL的操作: -- C#代码 

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

            MySqlConnection connect = new MySqlConnection(connStr);
            //Adapter创建方法
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            DataTable dt = new DataTable("user");

            //填充数据单个表
            connect.Open();
            adapter.Fill(dt);
            connect.Close();

            //遍历 添加前数据
            {
                Console.WriteLine("-----添加前数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            //添加新行
            DataRow dr = dt.NewRow();
            dr["user_id"] = 4;
            dr["user_name"] = "小思";
            dr["user_age"] = 22;
            dr["dept_id"] = 2;
            dt.Rows.Add(dr);

            string insertSql = "insert into tb_user(user_id,user_name,user_age, dept_id) values(@user_id,@name,@age,@dept_id);";
            MySqlCommand insertCmd = new MySqlCommand(insertSql, connect);
            MySqlParameter[] parameters = new MySqlParameter[]
            {
                new MySqlParameter("@user_id",MySqlDbType.Int32,4,"user_id"),
                new MySqlParameter("@name",MySqlDbType.VarChar,10,"user_name"),
                new MySqlParameter("@age",MySqlDbType.Int32,4,"user_age"),
                new MySqlParameter("@dept_id",MySqlDbType.Int32,4,"dept_id")
            };

            insertCmd.Parameters.Clear(); //防止原有数据未清
            insertCmd.Parameters.AddRange(parameters);
            adapter.InsertCommand = insertCmd;

            //!!!所查询的表必须有主键,否则保错!!!
            adapter.Update(dt);

            //遍历 添加后数据
            {
                Console.WriteLine("-----添加后数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示: 

3、删除数据到数据库 

修改前数据库数据:

C#对MySQL的操作: -- C#代码 

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

            MySqlConnection connect = new MySqlConnection(connStr);
            //Adapter创建方法
            MySqlCommand cmd = new MySqlCommand(sql, connect);
            MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);

            DataTable dt = new DataTable("user");

            //填充数据单个表
            connect.Open();
            adapter.Fill(dt);
            connect.Close();

            //遍历 删除前数据
            {
                Console.WriteLine("-----删除前数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

            dt.Rows[2].Delete();

            string deleteSql = "delete from tb_user where user_id = @id;";
            MySqlCommand deleteCmd = new MySqlCommand(deleteSql, connect);
            MySqlParameter[] parameters = new MySqlParameter[]
            {
                new MySqlParameter("@id",MySqlDbType.Int32,4,"user_id"),
            };

            deleteCmd.Parameters.Clear(); //防止原有数据未清
            deleteCmd.Parameters.AddRange(parameters);
            adapter.DeleteCommand = deleteCmd;

            //!!!所查询的表必须有主键,否则保错!!!
            adapter.Update(dt);

            //遍历 删除后数据
            {
                Console.WriteLine("-----删除后数据-------");
                //显示表名
                Console.WriteLine(dt.TableName);
                //遍历显示列名
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write($"{dt.Columns[i].ColumnName}  ");
                }
                Console.WriteLine();
                //遍历显示内容
                foreach (DataRow row in dt.Rows)
                {
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        Console.Write($"{row[i]}  ");
                    }
                    Console.WriteLine();
                }
            }

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

结果显示: 

如有错误,烦请批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值