/// <summary> /// Gets the prepared statement parameters. /// </summary> /// <returns>The Parameters List</returns> internal Dictionary <string, string> GetPreparedStatementParameters() { Dictionary <String, int> paramsIndexInPrepStatement = GetPreparedStatementParametersDic(); Dictionary <string, string> parametersList = new Dictionary <string, string>(); // For each parameter 1) get the index 2) get the dbType foreach (KeyValuePair <String, int> parameter in paramsIndexInPrepStatement) { AceQLParameter aceQLParameter = this.Parameters.GetAceQLParameter(parameter.Key); int paramIndex = parameter.Value; AceQLNullType aceQLNullType = aceQLParameter.SqlNullType; Object ParmValue = aceQLParameter.Value; //Reconvert SqlType original Java value by diving per 10000 and multiplying per -1: int sqlType = (int)aceQLNullType; sqlType = sqlType / (int)AceQLNullType.CHAR; // For OUT parameters that may be null value if (ParmValue == null) { ParmValue = "NULL"; } Debug("paramIndex: " + paramIndex); Debug("ParmValue : " + ParmValue + ":"); if (aceQLParameter.IsNullValue) { String paramType = "TYPE_NULL" + sqlType; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, "NULL"); } else if (ParmValue is Stream) { // All streams are blob for now // This will be enhanced in future version String blobId = BuildUniqueBlobId(); blobIds.Add(blobId); blobStreams.Add((Stream)ParmValue); blobLengths.Add(aceQLParameter.BlobLength); String paramType = "BLOB"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, blobId); } else if (ParmValue is string || ParmValue is String) { String paramType = "VARCHAR"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString()); } else if (ParmValue is long) { String paramType = "BIGINT"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString()); } else if (ParmValue is int) { String paramType = "INTEGER"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString()); } else if (ParmValue is short) { String paramType = "TINYINT"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString()); } else if (ParmValue is bool || ParmValue is Boolean) { String paramType = "BIT"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString()); } else if (ParmValue is float) { String paramType = "REAL"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString().Replace(",", ".")); } else if (ParmValue is double || ParmValue is Double) { String paramType = "DOUBLE_PRECISION"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ParmValue.ToString().Replace(",", ".")); } else if (ParmValue is DateTime) { String paramType = "TIMESTAMP"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ConvertToTimestamp((DateTime)ParmValue)); } else if (ParmValue is TimeSpan) { String paramType = "TIME"; parametersList.Add("param_type_" + paramIndex, paramType); parametersList.Add("param_value_" + paramIndex, ConvertToTimestamp((DateTime)ParmValue)); } else { throw new AceQLException("Type of value is not supported. Value: " + ParmValue + " / Type: " + ParmValue.GetType(), 2, (Exception)null, HttpStatusCode.OK); } if (!aceQLParameter.IsNullValue && !(ParmValue is Stream)) { if (aceQLParameter.Direction == Api.ParameterDirection.InputOutput) { parametersList.Add("param_direction_" + paramIndex, "inout"); parametersList.Add("out_param_name_" + paramIndex, aceQLParameter.ParameterName); } else if (aceQLParameter.Direction == Api.ParameterDirection.Output) { parametersList.Add("param_direction_" + paramIndex, "out"); parametersList.Add("out_param_name_" + paramIndex, aceQLParameter.ParameterName); } else { // Defaults to "in" on server } } } return(parametersList); }
/// <summary> /// Constructor. /// </summary> /// <param name="aceQLNullType">The type to associate the null value to.</param> public AceQLNullValue(AceQLNullType aceQLNullType) { this.aceQLNullType = aceQLNullType; }