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