RM新时代网站-首页

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

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

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

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

汽車電子技術(shù) ? 來(lái)源:程序猿知秋 ? 作者:程序猿知秋 ? 2023-02-28 09:50 ? 次閱讀

圖片

依賴插件

**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();
    }
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Data
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    38266
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    804

    瀏覽量

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

    關(guān)注

    0

    文章

    326

    瀏覽量

    22440
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

    labview 連接mysql 數(shù)據(jù)庫(kù)的問(wèn)題

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

    labview連接mysql數(shù)據(jù)庫(kù)的問(wèn)題

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java通過(guò)驅(qū)動(dòng)包連接MySQL數(shù)據(jù)庫(kù)的步驟總結(jié)及驗(yàn)證

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

    分享一個(gè)簡(jiǎn)單的連接MYSQL數(shù)據(jù)庫(kù)的小功能

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

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

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

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

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

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

    使用之前需要先在 vs中安裝MySql.Data 插件
    的頭像 發(fā)表于 01-20 15:04 ?863次閱讀
    如何<b class='flag-5'>連接</b><b class='flag-5'>Mysql</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>
    RM新时代网站-首页