zoukankan      html  css  js  c++  java
  • 一个ORALCE快速批量写入方法的类

        public class OracleBatchInsertUtil
        {
            /// <summary>
            ///  批量插入数据  
            /// </summary>
            /// <param name="tableName">表名称  </param>
            /// <param name="columnRowData">键-值存储的批量数据:键是列名称,值是对应的数据集合</param>
            /// <param name="conStr">连接字符串</param>
            /// <param name="len">每次批处理数据的大小</param>
            /// <returns></returns>
            public static int BatchInsert(string tableName, Dictionary<string, object> columnRowData, string conStr, int len)
            {
                if (string.IsNullOrEmpty(tableName))
                {
                    throw new ArgumentException("必须指定批量插入的表名称", "tableName");
                }
    
                if (columnRowData == null || columnRowData.Count < 1)
                {
                    throw new ArgumentException("必须指定批量插入的字段名称", "columnRowData");
                }
    
                int iResult = 0;
                string[] dbColumns = columnRowData.Keys.ToArray();
                StringBuilder sbCmdText = new StringBuilder();
                if (columnRowData.Count > 0)
                {
                    //准备插入的SQL  
                    sbCmdText.AppendFormat("INSERT INTO {0}(", tableName);
                    sbCmdText.Append(string.Join(",", dbColumns));
                    sbCmdText.Append(") VALUES (");
                    sbCmdText.Append(":" + string.Join(",:", dbColumns));
                    sbCmdText.Append(")");
    
                    using (OracleConnection conn = new OracleConnection(conStr))
                    {
                        using (OracleCommand cmd = conn.CreateCommand())
                        {
                            //绑定批处理的行数  
                            cmd.ArrayBindCount = len;
                            cmd.BindByName = true;
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = sbCmdText.ToString();
                            cmd.CommandTimeout = 600;//10分钟  
    
                            //创建参数  
                            OracleParameter oraParam;
                            List<IDbDataParameter> cacher = new List<IDbDataParameter>();
                            foreach (string colName in dbColumns)
                            {
                                var dbType = GetOracleDbType(columnRowData[colName]);
                                oraParam = new OracleParameter(colName, dbType);
                                oraParam.Direction = ParameterDirection.Input;
                                oraParam.OracleDbTypeEx = dbType;
    
                                oraParam.Value = columnRowData[colName];
                                cmd.Parameters.Add(oraParam);
                            }
                            //打开连接  
                            conn.Open();
    
                            /*执行批处理*/
                            var trans = conn.BeginTransaction();
                            try
                            {
                                cmd.Transaction = trans;
                                iResult = cmd.ExecuteNonQuery();
                                trans.Commit();
                            }
                            catch (Exception ex)
                            {
                                trans.Rollback();
                                throw ex;
                            }
                            finally
                            {
                                if (conn != null) conn.Close();
                            }
    
                        }
                    }
                }
                return iResult;
            }
    
            /// <summary>
            /// 据数据类型获取OracleDbType  
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            private static OracleDbType GetOracleDbType(object value)
            {
                if (value is string[])
                    return OracleDbType.Varchar2;
                else if (value is DateTime[])
                    return OracleDbType.TimeStamp;
                else if (value is DateTime?[])
                    return OracleDbType.TimeStamp;
                else if (value is int[] || value is short[])
                    return OracleDbType.Int32;
                else if (value is long[])
                    return OracleDbType.Int64;
                else if (value is decimal[] || value is double[] || value is float[])
                    return OracleDbType.Decimal;
                else if (value is Guid[])
                    return OracleDbType.Varchar2;
                else if (value is bool[] || value is Boolean[])
                    return OracleDbType.Byte;
                else if (value is byte[])
                    return OracleDbType.Blob;
                else if (value is char[])
                    return OracleDbType.Char;
                else
                    return OracleDbType.Varchar2;
            }
        }
    

      

  • 相关阅读:
    HAProxy、Keepalived 在 Ocatvia 的应用实现与分析
    Octavia 的 HTTPS 与自建、签发 CA 证书
    Octavia 创建 loadbalancer 的实现与分析
    OpenStack Rally 质量评估与自动化测试利器
    自建 CA 中心并签发 CA 证书
    Failed building wheel for netifaces
    通过 vSphere WS API 获取 vCenter Datastore Provisioned Space 置备空间
    OpenStack Placement Project
    我们建了一个 Golang 硬核技术交流群(内含视频福利)
    没有图形界面的软件有什么用?
  • 原文地址:https://www.cnblogs.com/saving/p/11170717.html
Copyright © 2011-2022 走看看