mysql数据库连接方法,mysql数据库连接
依赖插件
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.StoredProcedure cmd.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(); } }}