c#使用mysql (MySqlCommand、MySqlDataAdapter、BeginTransaction)


 在NuGet程序包中安裝MySql.Data

 

引入命名空間

using MySql.Data.MySqlClient;

using System.Configuration;

 

在App.config中配置(方便更改連接)

<connectionStrings>
    <add name ="connStr" connectionString="server=localhost;port=3306;user=root;password=123456; database=testdb" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>

 

使用 MySqlCommand(數據不會存儲,需要定義一個數組手動存儲)

string connetStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

try
{
    using (MySqlConnection conn = new MySqlConnection(connetStr))  //寫在using(){}內會自動釋放Dispose,可以省略x.Close()
    {
        conn.Open();
        Console.WriteLine("連接數據庫");
        //在這里使用代碼對數據庫進行增刪查改
     string sql = "select * from tb_user where id=@id;";//創建命令,使用Parameters對象方法可防止SQL注入等問題
        MySqlCommand cmd = new MySqlCommand(sql,conn);

     cmd.Parameters.AddWithValue("@id",4);  //傳單個參數
     /*
      "select * from tb_user where id>@id and age>@age;"
     MySqlParameter[] paras =         //傳多個參數
     {
      new MySqlParameter("@id", 1),
      new MySqlParameter("@age", 18)
     }
     cmd.Parameters.AddRange(paras);
     */

        //cmd.CommandType = CommandType.StoredProcedure;//如果是存儲過程,必須設置。(需引入命名空間 using System.Data;)

     int count = cmd.ExecuteNonQuery();//返回受影響的行數,適用於增刪改,返回的數據為int類型

     object es = cmd.ExecuteScalar();//返回查詢結果第一條數據的第一個字段,適用於查詢有多少條數據,返回的數據為object類型

     MySqlDataReader dr = cmd.ExecuteReader();   //只讀,使用於只讀取數據不修改的情況且數據量比較小的情況
    if (dr.HasRows)//判斷是否有數據
    {
       string idName = dr.GetName(0);  //通過列號獲取列名
       int indexId = dr.GetOrdinal("id");  //通過列名獲取列號
       int indexName = dr.GetOrdinal("name");
       int indexAge = dr.GetOrdinal("age");
       while (dr.Read())
       {
          //建議通過list集合來自定義一個類型,用來存儲獲取到的數據
      
//int id = (int)dr["id"];此方法會頻繁拆箱裝箱消耗性能,建議使用下面的方法         int id = dr.GetInt32(indexId);  //通過列號獲取數據         string name = dr.GetString(indexName);           int age = dr.GetInt32(indexAge);       string str = "用戶id:" + id + ",用戶名:" + name + ",用戶年齡:" + age + "";       Console.WriteLine(str);        }     }      dr.Close();  //需要手動關閉,在using(){}中使用時可以省略 } } catch(MySqlException ex) { Console.WriteLine(ex.Message); switch (ex.Number) { case 0: Console.WriteLine("無法連接到服務器"); break; case 1045: Console.WriteLine("賬號密碼錯誤"); break; } } finally { Console.WriteLine("關閉數據庫"); }

 

使用適配器 MySqlDataAdapter(將數據存儲到內存中,占用內存)

string connetStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connetStr);

string sql = "select * from tb_user where id>@id";
MySqlCommand cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@id", 2);

//使用MySqlDataAdapter可省略conn.Open(),conn.Close(),在方法內部會自動調用
MySqlDataAdapter da = new MySqlDataAdapter(cmd);
da.TableMappings.Add("Table", "User");  //設置表名映射
DataTable dt = new DataTable();    //需引入命名空間using System.Data;
da.Fill(dt);  //將dt表存儲到內存中

dt.Rows[0]["name"] = "abc";//修改dt表第一列name字段的數據
DataRow dr = dt.NewRow();//增加新數據
dr["id"] = 6;
dr["name"] = "張三";
dr["age"] = 15;
dt.Rows.Add(dr);

MySqlCommandBuilder cmdBuilder = new MySqlCommandBuilder(da);  //自動為da配置命令
da.Update(dt);    //更新到數據庫中

 

 使用事務 BeginTransaction(此方法用來批量執行一組命令,一個命令錯誤就會全部回滾,防止誤提交問題)

string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
using (MySqlConnection conn = new MySqlConnection(connStr))
{
    MySqlTransaction tran = null;
    try
    {
        conn.Open();
        tran = conn.BeginTransaction();    //開啟一個事務
        MySqlCommand cmd = conn.CreateCommand();
        cmd.Transaction = tran;     //設置要執行的事務


        //定義要執行的操作
        cmd.CommandText = "insert into tb_user (id,name,age,time) values(@id,@name,@age,@time);select @@identity";
        MySqlParameter[] pares =
        {
            new MySqlParameter("@id",10),
            new MySqlParameter("@name","李四"),
            new MySqlParameter("@age",25),
            new MySqlParameter("@time",DateTime.Now)
        };
        cmd.Parameters.AddRange(pares);
        cmd.ExecuteScalar();
        cmd.Parameters.Clear(); //清空命令集合

        //執行下一個命令
        cmd.CommandText = "select * from tb_user";
        cmd.ExecuteScalar();
        cmd.Parameters.Clear();

        //下一個命令......
tran.Commit();
//事務提交 Console.WriteLine("用戶添加成功"); } catch (MySqlException ex) { tran.Rollback();//事務回滾 Console.WriteLine(ex.Message); Console.WriteLine("添加失敗"); } }

 

 

 

 

 

 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM