private static IDbDataParameter ReadIntoBatchParameter(IList <Entity> entities, RdbColumn column, IRawDbAccesser dba) { var parameter = dba.ParameterFactory.CreateParameter(); parameter.ParameterName = column.Name; #region 对于 CLOB 类型,需要特殊处理。 var dbType = column.Info.ColumnMeta.DataType ?? OracleDbTypeHelper.ConvertFromCLRType(column.Info.DataType); /*********************** 代码块解释 ********************************* * 不再需要对 CLOB 类型特殊处理 * * 这是因为:某个字段使用 CLOB 类型后,如果再使用 BatchInsert 的功能,如果数据条数较多时(1000条未再现,10000条时出现), * oracle.exe 会一直占用 100% CPU,而且一直运行,不再返回(目前还不知道什么原因)。 * * 另外,如果不使用 OracleDbType.Clob 来标记 OracleParameter,而只是使用 DbType.String,也可以正确的运行。 **********************************************************************/ //bool setOracleDbTypeEx = false; //if (dbType == DbType.String || dbType == DbType.AnsiString) //{ // //对于 CLOB 类型,需要特殊处理。 // var length = column.Info.ColumnMeta.DataTypeLength; // if (OracleDbTypeHelper.CLOBTypeName.EqualsIgnoreCase(length) || "MAX".EqualsIgnoreCase(length)) // { // (parameter as OracleParameter).OracleDbTypeEx = OracleDbType.Clob; // setOracleDbTypeEx = true; // } //} //else if (dbType == DbType.Binary) //{ // (parameter as OracleParameter).OracleDbTypeEx = OracleDbType.Blob; // setOracleDbTypeEx = true; //} //if (!setOracleDbTypeEx) //{ parameter.DbType = dbType; //} #endregion int rowsCount = entities.Count; var valueArray = new object[rowsCount] as IList; for (int j = 0; j < rowsCount; j++) { var entity = entities[j]; var value = column.ReadParameterValue(entity); valueArray[j] = value; } parameter.Value = valueArray; return(parameter); }
private static IDbDataParameter ReadIntoBatchParameter(IList <Entity> entities, RdbColumn column, IRawDbAccesser dba) { var parameter = dba.ParameterFactory.CreateParameter(); parameter.ParameterName = column.Name; parameter.DbType = OracleDbTypeHelper.ConvertFromCLRType(column.Info.DataType); int rowsCount = entities.Count; var valueArray = new object[rowsCount] as IList; for (int j = 0; j < rowsCount; j++) { var entity = entities[j]; var value = column.ReadParameterValue(entity); valueArray[j] = value; } parameter.Value = valueArray; return(parameter); }
/// <summary> /// 获取包含指定实体类所对应列名对应属性的值参数对象 /// </summary> /// <param name="entity">实体对象</param> /// <param name="column">列对象</param> /// <param name="dba"></param> /// <returns>返回包含参数值的对象实例</returns> private static IDbDataParameter GetDataParameterObject(Entity entity, RdbColumn column, IRawDbAccesser dba) { var parameter = dba.ParameterFactory.CreateParameter(); parameter.ParameterName = column.Name; var dbType = column.Info.ColumnMeta.DataType ?? MySqlDbTypeHelper.ConvertFromCLRType(column.Info.DataType); parameter.DbType = dbType; parameter.Value = column.ReadParameterValue(entity); return(parameter); }