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

  • 相关阅读:
    Using Subversion and ViewCVS on Solaris 10
    Solaris开放源代码了!
    小笨霖英语笔记本(0)
    How to start CDE/JDS with xinit command
    英译汉练习:Solaris 10进入Linux领地
    UNIX/LINUX 平台可执行文件格式分析
    小笨霖英语笔记本(2)
    小笨霖英语笔记本(3)
    小笨霖英语笔记本(1)
    魔鬼城雅丹地貌
  • 原文地址:https://www.cnblogs.com/johnblogs/p/6744172.html
Copyright © 2011-2022 走看看