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;
        }

.Net插入大批量数据的更多相关文章

  1. MySQL插入大批量数据时报错“The total number of locks exceeds the lock table size”的解决办法

    事情的原因是:我执行了一个load into语句的SQL将一个很大的文件导入到我的MySQL数据库中,执行了一段时间后报错"The total number of locks exceeds ...

  2. ES的副本数量、插入大批量数据前,副本数应该设置为0

    多副本可以提升检索的能力,但是如果副本数量太多,插入数据的时候容易出现卡顿现象: 因为主分片要把数据同步给所有的副本,所以建议副本数量最好是1-2个: ---- Es在索引数据的时候,如果存在副本,那 ...

  3. SQL 数据库连续插入大批量数据时超时

    经常会处理大批量千万级的数据,一直以来都没问题.最近在处理时确出来了经常超时,程序跑一段时间就得停下来重启服务器,根据几次的调整发现了问题的所在,产生这类问题主要是以下几点所导致:      1.数据 ...

  4. identity_insert---实验性插入大批量数据和分页存储过程

    OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 1create database data_Test --创建数据库data_Test 2use da ...

  5. JDBC 插入大批量数据

    时不时会有大量数据的插入操作,方式有多种,效率不同: 1. statement 2. prepareStatement 3. statement/prepareStatement + batch 4. ...

  6. Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新

    需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...

  7. mysql总结:索引,存储引擎,大批量数据插入,事务,锁

    mysql总结 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 存储引擎: 常见存储引擎: Myisam:5.5之前默认引擎,支持 ...

  8. ODP方式,大批量数据写入ORACLE数据库

    项目中在同步数据的时候,需要把获得的数据DataTable,写入oracle数据库 因为System.Data.OracleClient写入方式写入大批量数据特别慢,改用Oracle.DataAcce ...

  9. Java实现大批量数据导入导出(100W以上) -(一)导入

    最近业务方有一个需求,需要一次导入超过100万数据到系统数据库.可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库. 大数据量报表导出请参考:Java实现大批量 ...

随机推荐

  1. ACM学习历程—Codeforces Round #354 (Div. 2)

    http://codeforces.com/contest/676 在allzysyz学弟和hqwhqwhq的邀请下,打了我的第三场CF... 毕竟在半夜..所以本来想水到12点就去睡觉的...结果一 ...

  2. webpack新版本4.12应用九(配置文件之使用不同语言进行配置)

    使用不同语言进行配置(configuration languages) 查看原文|编辑此页 webpack 接受以多种编程和数据语言编写的配置文件.支持的文件扩展名列表,可以在 node-interp ...

  3. Web缓存技术

    本章导读 缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. ...

  4. java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream异常解决方法

    使用Tomcat部署Servlet程序时,单步调试跟踪到: List<FileItem> itemList = sfu.parseRequest(request); 总是会报错:Java. ...

  5. MySQL连接查询、联合查询、子查询

    参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...

  6. zabbix监控的配置

    ZABBIX监控的操作步骤有两个! 首先登录到zabbix 的主界面在configuration---host---create host在如上的host 创建界面中 主要是输入被监测的server的 ...

  7. 转:Oracle里几组重要的视图--v$sysstat,v$system_event,v$parameter v$system_parameter

    按组分的几组重要的性能视图 1.System 的 over view v$sysstat , v$system_event  , v$parameter,V$instance得到oracle_sid ...

  8. 屏蔽sql server 2008的智能提示

    1. 去掉这个勾 2. 如果你安装了Sql complete, 接着下面的

  9. BIOS设置fn

    在BIOS中可以设置fn开启或者关闭,但可能有某些电脑设置了也无效,可能需要更新BIOS驱动等等.

  10. oracle 12c使用问题总结

    1.无法登录 安装完毕只能使用system和sys用户,用安装时配置的密码登录:不能使用默认密码 2.远程无法访问 1)检测服务器配置 lsnrctl status 看到(DESCRIPTION=(A ...