zoukankan      html  css  js  c++  java
  • .Net插入大批量数据

     1、 使用SqlDataAdapter

            /// <summary>
            /// 实现数据库事务,大批量新增数据
            /// </summary>
            /// <param name="dt">数据源</param>
            public static int ExecuteSqlTran(DataTable dt)
            {
                int affectRows = 0;
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand())
                    {
                        SqlTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);
                        try
                        {
                            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();

                            string insertcmd = @"
                                            DECLARE @Count INT;
                                            SELECT @Count = COUNT(*) FROM {0} WHERE {3};
                                            IF(@Count = 0)
                                            INSERT INTO {0} ({1}) VALUES ({2})";

                            StringBuilder columns = new StringBuilder();
                            StringBuilder filters = new StringBuilder();
                            StringBuilder paramvalues = new StringBuilder();

                            foreach (DataColumn dc in dt.Columns)
                            {
                                columns.Append(dc.ColumnName + ",");
                                paramvalues.Append("@" + dc.ColumnName + ",");
                                filters.AppendFormat(" {0} = @{0} AND ", dc.ColumnName);
                                SqlParameter par = new SqlParameter();
                                par.ParameterName = "@" + dc.ColumnName;
                                par.SourceColumn = dc.ColumnName;
                                command.Parameters.Add(par);
                            }
                            string column = columns.ToString().Substring(0, columns.ToString().LastIndexOf(','));
                            string paramvalue = paramvalues.ToString().Substring(0, paramvalues.ToString().LastIndexOf(','));
                            string filter = filters.ToString().Substring(0, filters.ToString().LastIndexOf("AND"));
                            command.CommandText = string.Format(insertcmd, dt.TableName, column, paramvalue, filter);
                            command.Connection = connection;
                            command.Transaction = transaction;
                            sqlDataAdapter.InsertCommand = command;

                            affectRows = sqlDataAdapter.Update(dt);

                            transaction.Commit();
                            connection.Close();
                        }
                        catch (Exception ex)
                        {
                            transaction.Rollback();
                            throw;
                        }
                        finally
                        {
                            command.Dispose();
                            connection.Close();
                        }
                    }
                }
                return affectRows;
            }

  • 相关阅读:
    利用python 掌握机器学习的过程
    SendMessage用法
    python函数形参中的*args和**kwargs
    python 用win32修改注册表,修改打开IE浏览器的配置
    python .py .pyc .pyw .pyo .pyd区别
    代码性能提升10倍(ForkJoin)
    雪花算法生成id
    配置虚拟机
    kafka多线程消费
    Redis存储对象序列化和反序列化
  • 原文地址:https://www.cnblogs.com/johnblogs/p/6744172.html
Copyright © 2011-2022 走看看