C# (江湖小新)- 连接Mysql数据库
短信预约 -IT技能 免费直播动态提醒
依赖插件
MySql.Data安装
-
使用之前需要先在 vs中安装MySql.Data 插件,本文采用 Nuget 方式安装 ,步骤如下:
-
选中项目右键——》管理Nuget程序包
-
输入 MySql.Data ,搜索安装即可
-
连接数据库的基本对象介绍
- MySqlConnection: 数据库连接对象
- MySqlCommand: sql语句执行对象
- MySqlDataReader:包含sql语句执⾏的结果,并提供⼀个⽅法从结果中阅读⼀⾏
- MySqlTransaction: sql事务管理对象
- MySqlException: 报错时返回的Exception。
- MySqlCommandBuilder:自动生成命令,该命令用于MySQL数据库协调对数据集所做的更改
- MySqlDataAdapter: 表示一组数据命令和数据库连接,用于填充数据集和更新MySQL数据库
- MySqlHelper:提供帮助的工具类
sql执行方法
ExcuteNonQuery
:执行【insert(增)】、【updata(改)】、【delete(删)】语句ExcuteReader
:执行多行查询,返回DataReader对象ExcuteScalar
:执行单行查询,返回查询结果的首行数据
DataTable和DataSet 容器
- 可以把DataTable和DataSet看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里
- DataSet 可以比作一个内存中的数据库
- DataTable 是一个内存中的数据表
- DataSet 里可以存储多个DataTable
- 数据结果 直接放到 dataTable中
-
DataTable dt = new DataTable();MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);// 将数据填充到dataTable中DataAdapter.Fill(dt);
-
- 数据结果 直接放到 dateSet 中
-
DataSet ds = new DataSet();MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);// 将数据填充到dataSet中DataAdapter.Fill(ds);
-
- 数据结果放到dataset中,若要用那个datatable,可以这样:dataset[0]
-
DataSet ds = new DataSet();MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);// 将数据填充到dataSet中DataAdapter.Fill(ds);DataTable td = ds.Tables[0]
-
Mysql的增删改查(CRUD)
创建Mysql连接
- 方式一: 通过 MySqlConnectionStringBuilder 对象
public MySqlConnection createConnect(){// 数据连接的基本信息对象MySqlConnectionStringBuilder scsb = new MySqlConnectionStringBuilder();scsb.UserID = "root";scsb.Server = "127.0.0.1";scsb.Port = 3306;scsb.Password = "123456";scsb.Database = "account_center";MySqlConnection mySqlConnection = new MySqlConnection(scsb.ConnectionString);mySqlConnection.Open();Console.WriteLine("数据库连接成功!");return mySqlConnection;}
-
方式二:直接通过字符串,然后new MySqlConnection
public MySqlConnection createConnect2(){// 数据连接的基本信息对象string conStr = "server=127.0.0.1;database=account_center;username=root;password=123456;";MySqlConnection mySqlConnection = new MySqlConnection(conStr);mySqlConnection.Open();return mySqlConnection;}
MySqlDataAdapter 方式
查询数据表数据(无参数)
public void queryNoArg(MySqlConnection conn){string sql = "select * from user_test ";DataTable dt = new DataTable();try{MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);// 将数据填充到dataTable中DataAdapter.Fill(dt);}catch (Exception ex){Console.WriteLine(ex.Message);}finally{// 关闭连接conn.Close();}// 打印表数据printData(dt);}
打印数据方法
public void printData(DataTable dt){if (dt.Rows.Count < 0){return;}//打印所有列名string columnName = string.Empty;for (int i = 0; i < dt.Columns.Count; i++){columnName += dt.Columns[i].ColumnName + " | ";}Console.WriteLine(columnName);Console.WriteLine("-------------------------");//打印每一行的数据foreach (DataRow row in dt.Rows){string columnStr = string.Empty;foreach (DataColumn column in dt.Columns){columnStr += row[column] + " | ";}Console.WriteLine(columnStr);}}
输出结果
name | age | create_date |-------------------------张三 | 12 | 2023/1/4 17:17:24 |李四 | 33 | 2023/1/4 17:17:24 |
查询数据表数据(带参数)
public void queryByArg(MySqlConnection conn){string sql = "select * from user_test where name=@p1 and age=@p2 ";DataTable dt = new DataTable();try{// 建立命令执行对象MySqlCommand cmd = new MySqlCommand();cmd.Connection = conn;cmd.CommandText = sql;// 设置命令的类型,普通的sql命令是字符串的用Text即可 ,如果是存储过程则用 CommandType.StoredProcedurecmd.CommandType = CommandType.Text;cmd.Parameters.AddWithValue("@p1", "张三");cmd.Parameters.AddWithValue("@p2", 12);MySqlDataAdapter DataAdapter = new MySqlDataAdapter(cmd);// 将数据填充到dataTable中DataAdapter.Fill(dt);// 释放资源DataAdapter.Dispose();}catch (Exception ex){Console.WriteLine(ex.Message);}finally{// 关闭连接conn.Close();}// 打印表数据printData(dt);}
输出结果
name | age | create_date |-------------------------张三 | 12 | 2023/1/4 17:17:24 |
MySqlDataReader 方式
查询数据表数据
public void ExecuteReader(MySqlConnection connection){string sql = "select * from user_test ";MySqlCommand cmd = new MySqlCommand(sql, connection);MySqlDataReader myReader = null;try{myReader = cmd.ExecuteReader();// 打印数据printByReader(myReader);}catch (Exception e){throw new Exception(e.Message);}finally{connection.Close();cmd.Dispose();}}
打印数据方法
public void printByReader(MySqlDataReader myReader){if (myReader==null){return;}//打印所有列名string columnName = string.Empty;for (int i = 0; i < myReader.FieldCount; i++){columnName += myReader.GetName(i) + " | ";}Console.WriteLine(columnName);Console.WriteLine("-------------------------");//打印每一行的数据while (myReader.Read()){string columnStr = string.Empty;for (int i = 0; i < myReader.FieldCount; i++){columnStr += myReader[i].ToString() + " | ";}Console.WriteLine(columnStr);}// 释放资源myReader.Close();}
输出结果
name | age | create_date |-------------------------张三 | 12 | 2023/1/4 17:17:24 |李四 | 33 | 2023/1/4 17:17:24 |
修改表数据都用 ExecuteNonQuery() 方法
ExecuteNonQuery() 适用于 添加、修改、删除 相关的sql操作
public int updateData(MySqlConnection conn){// 添加数据string addSql = "insert into user_test(name,age,create_date) values('王五',14,now())";// 修改数据string updateSql = "update user_test set age=55 where name='李四'";// 删除数据string delSql = "delete from user_test where name = '张三'";MySqlCommand cmd = new MySqlCommand(addSql, conn);try{int rows = cmd.ExecuteNonQuery();return rows;}catch (Exception e){conn.Close();//throw e;Console.WriteLine(e.Message);}finally{cmd.Dispose();conn.Close();}return -1;}
数据库事务(MySqlTransaction类)
事务执行过程:
-
开启
-
提交 -- 正常
-
回滚 -- 出现问题
事务管理
- BeginTransaction():开启事务, 只要未提交,期间执行的数据更新相关的操作都不会生效
- transaction.Commit(): 提交事务,提交后,数据更新
- transaction.Rollback():回滚事务,回滚后,之前执行的数据更新操作都将失效
public void TransactionTest(MySqlConnection conn){string sql = "insert into user_test(name,age,create_date) values('bbb',224,now())";// 开启事务MySqlTransaction transaction = conn.BeginTransaction();try{MySqlCommand cmd = new MySqlCommand(sql, conn);cmd.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine(ex.Message); // 事务回滚transaction.Rollback();conn.Close();}finally{if (conn.State != ConnectionState.Closed){//事务要么回滚要么提交,即Rollback()与Commit()只执行一个transaction.Commit();conn.Close();}}}// 更多**好看的内容**和**好玩的案例**请关注**我的微信公众号: 程序猿知秋**
来源地址:https://blog.csdn.net/qq_25702235/article/details/128551498
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341