依賴插件
**MySql.Data安裝 **
- 使用之前需要先在 vs中安裝MySql.Data 插件,本文采用 Nuget 方式安裝 ,步驟如下:
- **選中項(xiàng)目右鍵——》管理Nuget程序包 **
- 輸入 MySql.Data ,搜索安裝即可
編輯
連接數(shù)據(jù)庫(kù)的基本對(duì)象介紹
- MySqlConnection: 數(shù)據(jù)庫(kù)連接對(duì)象
- MySqlCommand: sql語(yǔ)句執(zhí)行對(duì)象
- MySqlDataReader:包含sql語(yǔ)句執(zhí)?的結(jié)果,并提供?個(gè)?法從結(jié)果中閱讀??
- MySqlTransaction: sql事務(wù)管理對(duì)象
- MySqlException: 報(bào)錯(cuò)時(shí)返回的Exception。
- MySqlCommandBuilder:自動(dòng)生成命令,該命令用于MySQL數(shù)據(jù)庫(kù)協(xié)調(diào)對(duì)數(shù)據(jù)集所做的更改
- MySqlDataAdapter: 表示一組數(shù)據(jù)命令和數(shù)據(jù)庫(kù)連接,用于填充數(shù)據(jù)集和更新MySQL數(shù)據(jù)庫(kù)
- MySqlHelper:提供幫助的工具類
sql執(zhí)行方法
ExcuteNonQuery
: 執(zhí)行【insert(增)】、【updata(改)】、【delete(刪)】語(yǔ)句ExcuteReader
: 執(zhí)行多行查詢,返回DataReader對(duì)象ExcuteScalar
: 執(zhí)行單行查詢,返回查詢結(jié)果的首行數(shù)據(jù)
DataTable和DataSet 容器
- 可以把DataTable和DataSet看做是數(shù)據(jù)容器,比如你查詢數(shù)據(jù)庫(kù)后得到一些結(jié)果,可以放到這種容器里
- **DataSet **可以比作一個(gè)內(nèi)存中的數(shù)據(jù)庫(kù)
- **DataTable **是一個(gè)內(nèi)存中的數(shù)據(jù)表
- DataSet 里可以存儲(chǔ)多個(gè)DataTable
- 數(shù)據(jù)結(jié)果 直接放到 dataTable中
DataTable dt = new DataTable();
MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);
// 將數(shù)據(jù)填充到dataTable中
DataAdapter.Fill(dt);
- 數(shù)據(jù)結(jié)果 直接放到 dateSet 中
DataSet ds = new DataSet();
MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);
// 將數(shù)據(jù)填充到dataSet中
DataAdapter.Fill(ds);
- ****數(shù)據(jù)結(jié)果放到dataset中,若要用那個(gè)datatable,可以這樣:dataset[0] ****
DataSet ds = new DataSet();
MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);
// 將數(shù)據(jù)填充到dataSet中
DataAdapter.Fill(ds);
DataTable td = ds.Tables[0]
Mysql的增刪改查(CRUD)
創(chuàng)建Mysql連接
- 方式一: 通過(guò) MySqlConnectionStringBuilder 對(duì)象
public MySqlConnection createConnect()
{
// 數(shù)據(jù)連接的基本信息對(duì)象
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("數(shù)據(jù)庫(kù)連接成功!");
return mySqlConnection;
}
- 方式二: 直接通過(guò)字符串,然后new MySqlConnection
public MySqlConnection createConnect2()
{
// 數(shù)據(jù)連接的基本信息對(duì)象
string conStr = "server=127.0.0.1;database=account_center;username=root;password=123456;";
MySqlConnection mySqlConnection = new MySqlConnection(conStr);
mySqlConnection.Open();
return mySqlConnection;
}
MySqlDataAdapter 方式
查詢數(shù)據(jù)表數(shù)據(jù)(無(wú)參數(shù))
public void queryNoArg(MySqlConnection conn)
{
string sql = "select * from user_test ";
DataTable dt = new DataTable();
try
{
MySqlDataAdapter DataAdapter = new MySqlDataAdapter(sql, conn);
// 將數(shù)據(jù)填充到dataTable中
DataAdapter.Fill(dt);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
// 關(guān)閉連接
conn.Close();
}
// 打印表數(shù)據(jù)
printData(dt);
}
打印數(shù)據(jù)方法
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("-------------------------");
//打印每一行的數(shù)據(jù)
foreach (DataRow row in dt.Rows)
{
string columnStr = string.Empty;
foreach (DataColumn column in dt.Columns)
{
columnStr += row[column] + " | ";
}
Console.WriteLine(columnStr);
}
}
輸出結(jié)果
name | age | create_date |
-------------------------
張三 | 12 | 2023/1/4 17:17:24 |
李四 | 33 | 2023/1/4 17:17:24 |
查詢數(shù)據(jù)表數(shù)據(jù)(帶參數(shù))
public void queryByArg(MySqlConnection conn)
{
string sql = "select * from user_test where name=@p1 and age=@p2 ";
DataTable dt = new DataTable();
try
{
// 建立命令執(zhí)行對(duì)象
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
// 設(shè)置命令的類型,普通的sql命令是字符串的用Text即可 ,如果是存儲(chǔ)過(guò)程則用 CommandType.StoredProcedure
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@p1", "張三");
cmd.Parameters.AddWithValue("@p2", 12);
MySqlDataAdapter DataAdapter = new MySqlDataAdapter(cmd);
// 將數(shù)據(jù)填充到dataTable中
DataAdapter.Fill(dt);
// 釋放資源
DataAdapter.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
// 關(guān)閉連接
conn.Close();
}
// 打印表數(shù)據(jù)
printData(dt);
}
輸出結(jié)果
name | age | create_date |
-------------------------
張三 | 12 | 2023/1/4 17:17:24 |
MySqlDataReader 方式
查詢數(shù)據(jù)表數(shù)據(jù)
public void ExecuteReader(MySqlConnection connection)
{
string sql = "select * from user_test ";
MySqlCommand cmd = new MySqlCommand(sql, connection);
MySqlDataReader myReader = null;
try
{
myReader = cmd.ExecuteReader();
// 打印數(shù)據(jù)
printByReader(myReader);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
connection.Close();
cmd.Dispose();
}
}
打印數(shù)據(jù)方法
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("-------------------------");
//打印每一行的數(shù)據(jù)
while (myReader.Read())
{
string columnStr = string.Empty;
for (int i = 0; i < myReader.FieldCount; i++)
{
columnStr += myReader[i].ToString() + " | ";
}
Console.WriteLine(columnStr);
}
// 釋放資源
myReader.Close();
}
輸出結(jié)果
name | age | create_date |
-------------------------
張三 | 12 | 2023/1/4 17:17:24 |
李四 | 33 | 2023/1/4 17:17:24 |
修改表數(shù)據(jù)都用 ExecuteNonQuery() 方法
ExecuteNonQuery() 適用于 添加、修改、刪除 相關(guān)的sql操作
public int updateData(MySqlConnection conn)
{
// 添加數(shù)據(jù)
string addSql = "insert into user_test(name,age,create_date) values('王五',14,now())";
// 修改數(shù)據(jù)
string updateSql = "update user_test set age=55 where name='李四'";
// 刪除數(shù)據(jù)
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;
}
數(shù)據(jù)庫(kù)事務(wù)(MySqlTransaction類)
事務(wù)執(zhí)行過(guò)程:
- 開啟
- 提交 -- 正常
- 回滾 -- 出現(xiàn)問(wèn)題
**事務(wù)管理 **
- BeginTransaction(): 開啟事務(wù), 只要未提交,期間執(zhí)行的數(shù)據(jù)更新相關(guān)的操作都不會(huì)生效
- transaction.Commit(): 提交事務(wù),提交后,數(shù)據(jù)更新
- transaction.Rollback(): 回滾事務(wù),回滾后,之前執(zhí)行的數(shù)據(jù)更新操作都將失效
public void TransactionTest(MySqlConnection conn)
{
string sql = "insert into user_test(name,age,create_date) values('bbb',224,now())";
// 開啟事務(wù)
MySqlTransaction transaction = conn.BeginTransaction();
try
{
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
// 事務(wù)回滾
transaction.Rollback();
conn.Close();
}
finally
{
if (conn.State != ConnectionState.Closed)
{
//事務(wù)要么回滾要么提交,即Rollback()與Commit()只執(zhí)行一個(gè)
transaction.Commit();
conn.Close();
}
}
}
-
Data
+關(guān)注
關(guān)注
0文章
62瀏覽量
38266 -
MySQL
+關(guān)注
關(guān)注
1文章
804瀏覽量
26526 -
插件
+關(guān)注
關(guān)注
0文章
326瀏覽量
22440
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論