/// <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);
        }
Example #2
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="aceQLNullType">The type to associate the null value to.</param>
 public AceQLNullValue(AceQLNullType aceQLNullType)
 {
     this.aceQLNullType = aceQLNullType;
 }