目录
四、MySqlDataAdapter.Updata() -- 自动生成
五、MySqlDataAdapter.Updata() -- 手动生成
涉及知识点: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!");
}
}
结果显示:
如有错误,烦请批评指正