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

最新文章

  1. 无法进入adb shell,提示unknown host service的解决办法
  2. 大话immutable.js
  3. Java实现颜色渐变效果
  4. C#中定义数组
  5. LoRaWAN协议(一)--架构解析
  6. lucene字典实现原理——FST
  7. jquery的change 事件
  8. 1156. Two Rounds(dfs+背包)
  9. Helpers\Document
  10. C语言读写伯克利DB 4
  11. Jquery列表中的导航菜单的应用
  12. KestrelServer
  13. Java Core和HeapDump
  14. CentOS6.8安装mysql5.6
  15. 22、手把手教你Extjs5(二十二)模块Form的自定义的设计[1]
  16. python网络编程之单线程之间的并发
  17. 适合在Markdown里面使用的emoji
  18. Request method &#39;POST&#39; not supported解决办法
  19. JS 全选、全不选、反选
  20. java面向对象总结(二)

热门文章

  1. 十九、python沉淀之路--装饰器
  2. centos 7 bbr 安装
  3. 几个ADB常用命令
  4. FastAdmin 学习线路 (2018-09-09 增加 Layer 组件)
  5. 洛谷【P1064】金明的预算方案
  6. android通过查询电话号码获取联系人信息
  7. linux基础(3)
  8. 利用全局变量$_SESSION和register_shutdown_function自定义会话处理
  9. How to get the MD5 checksum for a file: md5sum, digest, csum, fciv
  10. (转)Oracle游标使用全解