0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何連接Mysql數(shù)據(jù)庫

汽車電子技術(shù) ? 來源:程序猿知秋 ? 作者: 程序猿知秋 ? 2023-01-20 15:04 ? 次閱讀

依賴插件

**MySql.Data安裝 **

  • 使用之前需要先在 vs中安裝MySql.Data 插件,本文采用 Nuget 方式安裝 ,步驟如下:
    • **選中項目右鍵——》管理Nuget程序包 **
    • 輸入 MySql.Data ,搜索安裝即可

****微信截圖_20230105161930.png

編輯****

連接數(shù)據(jù)庫的基本對象介紹

  • MySqlConnection: 數(shù)據(jù)庫連接對象
  • MySqlCommand: sql語句執(zhí)行對象
  • MySqlDataReader:包含sql語句執(zhí)?的結(jié)果,并提供?個?法從結(jié)果中閱讀??
  • MySqlTransaction: sql事務(wù)管理對象
  • MySqlException: 報錯時返回的Exception。
  • MySqlCommandBuilder:自動生成命令,該命令用于MySQL數(shù)據(jù)庫協(xié)調(diào)對數(shù)據(jù)集所做的更改
  • MySqlDataAdapter: 表示一組數(shù)據(jù)命令和數(shù)據(jù)庫連接,用于填充數(shù)據(jù)集和更新MySQL數(shù)據(jù)庫
  • MySqlHelper:提供幫助的工具類

sql執(zhí)行方法

  • ExcuteNonQuery 執(zhí)行【insert(增)】、【updata(改)】、【delete(刪)】語句
  • ExcuteReader 執(zhí)行多行查詢,返回DataReader對象
  • ExcuteScalar 執(zhí)行單行查詢,返回查詢結(jié)果的首行數(shù)據(jù)

DataTable和DataSet 容器

  • 可以把DataTable和DataSet看做是數(shù)據(jù)容器,比如你查詢數(shù)據(jù)庫后得到一些結(jié)果,可以放到這種容器里
  • **DataSet **可以比作一個內(nèi)存中的數(shù)據(jù)庫
  • **DataTable **是一個內(nèi)存中的數(shù)據(jù)表
  • DataSet 里可以存儲多個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中,若要用那個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連接

  • 方式一: 通過 MySqlConnectionStringBuilder 對象
public MySqlConnection createConnect()
{
  // 數(shù)據(jù)連接的基本信息對象
  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ù)庫連接成功!");
  return mySqlConnection;
}
  • 方式二: 直接通過字符串,然后new MySqlConnection
public MySqlConnection createConnect2()
{
  // 數(shù)據(jù)連接的基本信息對象
  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ù)(無參數(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í)行對象
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = sql;
    // 設(shè)置命令的類型,普通的sql命令是字符串的用Text即可 ,如果是存儲過程則用 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ù)庫事務(wù)(MySqlTransaction類)

事務(wù)執(zhí)行過程:

  • 開啟
  • 提交 -- 正常
  • 回滾 -- 出現(xiàn)問題

**事務(wù)管理 **

  • BeginTransaction(): 開啟事務(wù), 只要未提交,期間執(zhí)行的數(shù)據(jù)更新相關(guān)的操作都不會生效
  • 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í)行一個
      transaction.Commit();
      conn.Close();
    }
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Data
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    38283
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    813

    瀏覽量

    26600
  • 插件
    +關(guān)注

    關(guān)注

    0

    文章

    329

    瀏覽量

    22446
收藏 人收藏

    評論

    相關(guān)推薦

    如何在Rust中連接和使用MySQL數(shù)據(jù)庫

    如何在Rust中連接和使用MySQL數(shù)據(jù)庫。 安裝 mysql 模塊 這里我們假設(shè)你已經(jīng)安裝了Rust編程語言工具鏈,在本教程中,我們將使用 mys
    的頭像 發(fā)表于 09-30 17:05 ?1691次閱讀

    labview連接mysql數(shù)據(jù)庫

    =127.0.0.1;UID=root;DATABASE=mxjtest;PORT=3306";用以上語句為什么不行求解數(shù)據(jù)庫用戶root密碼100200就連自己電腦上的數(shù)據(jù)庫
    發(fā)表于 10-09 14:44

    labview 連接mysql 數(shù)據(jù)庫的問題

    `我根據(jù)網(wǎng)絡(luò)上的教程想用labsql 做個連接mysql的vi,但是就是連接不上數(shù)據(jù)庫。(已經(jīng)新建數(shù)據(jù)源DSN)求教下,字符串 3,4 是不
    發(fā)表于 01-07 22:06

    labview連接mysql數(shù)據(jù)庫的問題

    這個ODBC數(shù)據(jù)流已經(jīng)成功設(shè)置了,為什么用labview連接mysql數(shù)據(jù)庫就出現(xiàn)這個錯誤呢?望大神解答,謝謝啦!
    發(fā)表于 08-19 08:30

    labview連接mysql數(shù)據(jù)庫失敗,原因何在。

    `使用ODBC連接mysql時,測試連接成功;但是使用labview連接mysql時,測試連接
    發(fā)表于 11-29 17:02

    采用hqC連接mysql數(shù)據(jù)庫

    eclipse連接mysql(80)的版本問題
    發(fā)表于 04-30 10:27

    Python連接MySQL數(shù)據(jù)庫及模塊封裝

    python連接mysql與sql server數(shù)據(jù)庫及相應(yīng)的模塊封裝
    發(fā)表于 05-01 16:06

    如何使用原生hqc連接MySQL數(shù)據(jù)庫

    springboot項目中使用原生hqc連接MySQL數(shù)據(jù)庫
    發(fā)表于 06-08 12:12

    c#如何連接mysql數(shù)據(jù)庫

    (visual studio)c#連接mysql數(shù)據(jù)庫
    發(fā)表于 06-13 20:56

    python如何連接MySql數(shù)據(jù)庫

    Python入門(python連接MySql數(shù)據(jù)庫)還能怎么記,大開眼界!
    發(fā)表于 06-14 07:48

    Java通過驅(qū)動包連接MySQL數(shù)據(jù)庫的步驟總結(jié)及驗證

    Java通過驅(qū)動包(jar包)連接MySQL數(shù)據(jù)庫---步驟總結(jié)及驗證
    發(fā)表于 06-15 16:57

    分享一個簡單的連接MYSQL數(shù)據(jù)庫的小功能

    LabSQL連接數(shù)據(jù)庫的小demo,供大家指正交流
    發(fā)表于 06-18 14:14

    ESP8266如何連接mysql數(shù)據(jù)庫

    各位大神,我試圖用ESP8266 連接mysql ,將溫濕度傳感器的數(shù)據(jù),寫入數(shù)據(jù)庫。mysql數(shù)據(jù)庫
    發(fā)表于 01-12 09:22

    用JDBC連接MySQL數(shù)據(jù)庫并進行簡單的增刪改查操作

    本文主要詳細講解了用JDBC連接MySQL數(shù)據(jù)庫并進行簡單的增刪改查操作。Java 數(shù)據(jù)庫連接是Java語言中用來規(guī)范客戶端程序如何來訪問
    發(fā)表于 02-06 09:21 ?6314次閱讀
    用JDBC<b class='flag-5'>連接</b><b class='flag-5'>MySQL</b><b class='flag-5'>數(shù)據(jù)庫</b>并進行簡單的增刪改查操作

    連接Mysql數(shù)據(jù)庫

    使用之前需要先在 vs中安裝MySql.Data 插件,本文采用 Nuget 方式安裝 ,步驟如下: **選中項目右鍵——》管理Nuget程序包 *
    的頭像 發(fā)表于 02-28 09:50 ?694次閱讀
    <b class='flag-5'>連接</b><b class='flag-5'>Mysql</b><b class='flag-5'>數(shù)據(jù)庫</b>