c#mysql批量更新的两种方法

总体而言update 更新上传速度还是慢.

1:  简单的insert  速度稍稍比MySqlDataAdapter慢一点

配合dapper

配置文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
    </startup>
  <connectionStrings>
    <add name="sqlconnectionString" connectionString="server=127.0.0.1;database=MyDataBase;User=sa;password=123456;Connect Timeout=1000000"/>
   <!--<add name="mysqlconnectionString" connectionString="Database=terminal_info;Data Source=127.0.0.1;User Id=root;Password=123456;CharSet=utf8;port=3306"/>-->
    <add name="mysqlconnectionString" connectionString="Database=terminal_info;Data Source=192.168.1.220;User Id=root;Password=root;CharSet=utf8;port=3306"/>
  </connectionStrings>
</configuration>
 string connectionString = ConfigurationManager.ConnectionStrings["mysqlconnectionString"].ToString();
 public int Update(BaseTable model)
        {
            #region SQL语句
            const string sql = @"
            UPDATE  terminal_base
            SET  license_number2 = @license_number2  WHERE license_number = @license_number";
            #endregion
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {

                return connection.Execute(sql, model);
            }

        }
 public class BaseTable
    {
        public string license_number { get;set; }  //客户编码
        public string shop_name { get; set; }  //店铺名称
        public string user_name { get; set; }  //姓名
        public string phone_number { get; set; } //手机号  

    }

更新5万数据用了十来分钟吧.单线程处理的

2用MySqlDataAdapter上传 这个坑不少,网上资料也很少,   fill是 从当前数据库查询到数据填充到dataset, update是把 改完的dataset 上传到mysql  .

/// <summary>
        ///使用MySqlDataAdapter批量更新数据
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        /// <param name="table">数据表</param>
        public void BatchUpdate(List<BaseTable> model)
        {
            DataTable table = ListToDatatable.ToDataTable(model);
            table.TableName = "terminal_base";
            table.ExtendedProperties.Add("SQL", "select license_number,license_number2 from terminal_base");
            MySqlConnection connection = new MySqlConnection(connectionString);
            connection.Open();
            //创建数据适配器
            string sqlcommd= "select license_number,license_number2 from zyzs_terminal_base";

            MySqlDataAdapter adapter = new MySqlDataAdapter(sqlcommd, connection);
            DataSet ds = new DataSet();//创建数据集
            adapter.Fill(ds, "terminal_base");
            //  ds.Tables.Clear();
            //给SqlDataAdapter的UpdateCommand属性指定执行更新操作的SQL语句select * from zyzs_terminal_base
             adapter.UpdateCommand = new MySqlCommand("update terminal_base set license_number2 = @license_number2 where [email protected]_number", connection);

            //添加参数并赋值
            adapter.UpdateCommand.Parameters.Add("@license_number2", MySqlDbType.VarChar, 50, "license_number2");
            MySqlParameter prams_ID = adapter.UpdateCommand.Parameters.Add("@license_number", MySqlDbType.VarChar);
            prams_ID.SourceColumn = "license_number";
            prams_ID.SourceVersion = DataRowVersion.Original;
            //填充数据集  //调用Update方法提交更新后的数据集ds,并同步更新数据库数据
            adapter.Update(ds, "terminal_base");
          //  transaction.Commit();
            //MySqlCommand command = connection.CreateCommand();
            //command.CommandTimeout = 4000;
            //command.CommandType = CommandType.Text;
            //MySqlDataAdapter adapter = new MySqlDataAdapter(command);
            //MySqlCommandBuilder commandBulider = new MySqlCommandBuilder(adapter);
            //commandBulider.ConflictOption = ConflictOption.OverwriteChanges;

            //MySqlTransaction transaction = null;
            //try
            //{
            //    connection.Open();
            //    transaction = connection.BeginTransaction();
            //    //设置批量更新的每次处理条数
            //    adapter.UpdateBatchSize = 1000;
            //    //设置事物
            //    adapter.SelectCommand.Transaction = transaction;
            //    if (table.ExtendedProperties["SQL"] != null)
            //    {
            //        adapter.SelectCommand.CommandText = table.ExtendedProperties["SQL"].ToString();
            //    }

            //    adapter.Fill(ds, "zyzs_terminal_base");
            //    adapter.Update(table);
            //    transaction.Commit();/////提交事务
            //  }
            //catch (MySqlException ex)
            //{
            //    if (transaction != null) transaction.Rollback();
            //    throw ex;
            //}
            //finally
            //{
            //    connection.Close();
            //    connection.Dispose();
            //}
        }
        //public int Update(Model.Model model)
        //{
        //    #region SQL语句
        //    const string sql = @"
        //    UPDATE [dbo].[Contacts]
        //    SET
        //            [UserName] = @UserName
        //            ,[Tel] = @Tel
        //            ,[Tel1] = @Tel1
        //            ,[Address] = @Address
        //                WHERE [Id] = @Id";
        //    #endregion
        //    using (SqlConnection connection = new SqlConnection(connstr))
        //    {

        //        return connection.Execute(sql, model);
        //    }

        //}
#endregion

原文地址:https://www.cnblogs.com/zuochanzi/p/9140854.html

时间: 2024-11-10 20:09:18

c#mysql批量更新的两种方法的相关文章

mybatis学习之路----批量更新数据两种方法效率对比

原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方式有两种, 一种用for循环通过循环传过来的参数集合,循环出N条sql, 另一种 用mysql的case when 条件判断变相的进行批量更新 下面进行实现. 注意第一种方法要想成功,需要在db链接url后面带一个参数  &allowMultiQueries=true 即:  jdbc:mysql:

批量更新的两种方法

/** * 批量删除 * * @description */ @RequestMapping(value = "/deleteIdsLogicGoods") public void deleteIdsLogic(HttpServletRequest request, HttpServletResponse response) { String ids = null; if (request.getParameter("ids") != null) { ids = r

mysql级联更新的两种方式:触发器更新和外键

1.mysql级联更新有两种方式:触发器更新和外键更新. 2.触发器更新和外键更新的目的都是为了保证数据完整性. 我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 举个例子: 现有2个实体- 麻将机 学生.课程,1种联系- 成绩 分别创建 学生表 students, 课程表course,成绩表score --创建 学生表 students CREATE TABLE IF NOT EXISTS `students` ( `id` int(11)

【ADO.NET-中级】百万级数据的批量插入的两种方法测试

在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量数据插入方法:Bulk和表值参数(Table-Valued Parameters). 运行下面的脚本,建立测试数据库和表值参数. --Create DataBase create database BulkTestDB; Go use BulkTestDB; go --Create Table Cr

MySQL 添加用户设置两种方法

在mysql中root 最高的用户权限,权限分别为 SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,下面简单说说是如何分别用户的. 1,为添加用户的的实例,用户名为dc3688,密码为123456,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限 [email protected]# mysql -u root -p Enter password:******* mysql> use mysql; Database changed INSE

MySQL 创建数据库的两种方法

使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库. 实例 以下命令简单的演示了创建数据库的过程,数据名为 TUTORIALS: [[email protected]]# mysqladmin -u root -p create TUTORIALS Enter password:****** 以上命令执行成功后会创建

MySQL 删除数据库的两种方法

使用 mysqladmin 删除数据库 使用普通用户登陆mysql服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库. 在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失. 以下实例删除数据库TUTORIALS(该数据库在前一章节已创建): [[email protected]]# mysqladmin -u root -p drop T

MYSQL 事务处理常见有两种方法

MYSQL在操作大量的数据或者比较重要的数据的时候,事务处理很重要,比如银行的转账,支付,等等,作为开发人员事务是必须的一步. 1.用 BEGIN, ROLLBACK, COMMIT来实现 BEGIN 开始一个事务ROLLBACK 事务回滚COMMIT 事务确认 2.直接用 SET 来改变 MySQL 的自动提交模式: SET AUTOCOMMIT=0 禁止自动提交SET AUTOCOMMIT=1 开启自动提交 注意的是,在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事

mysql 批量更新与批量更新多条记录的不同值实现方法

在mysql中批量更新我们可能使用update,replace into来操作,下面来给各位详细介绍mysql 批量更新与性能吧! mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码代码如下: UPDATE mytable SET myfie