/// <summary>
        ///   Adds a <see cref="T:CUBRID.Data.CUBRIDClient.CUBRIDParameter" /> item with the specified value to the <see
        ///    cref="T:CUBRID.Data.CUBRIDClient.CUBRIDParameterCollection" />.
        /// </summary>
        /// <param name="value"> The <see cref="P:CUBRID.Data.CUBRIDClient.CUBRIDParameter.Value" /> of the <see
        ///    cref="T:CUBRID.Data.CUBRIDClient.CUBRIDParameter" /> to add to the collection. </param>
        /// <returns> The index of the <see cref="T:CUBRID.Data.CUBRIDClient.CUBRIDParameter" /> object in the collection. </returns>
        public override int Add(object value)
        {
            CUBRIDParameter parameter = value as CUBRIDParameter;

            if (parameter == null)
            {
                throw new ArgumentException(Utils.GetStr(MsgId.OnlyCUBRIDParameterObjectsAreValid));
            }

            if (string.IsNullOrEmpty(parameter.ParameterName))
            {
                throw new ArgumentException(Utils.GetStr(MsgId.ParametersMustBeNamed));
            }

            if (!parameter.ParameterName.StartsWith("?"))
            {
                throw new ArgumentException(Utils.GetStr(MsgId.ParameterNameMustStartWith));
            }

            if (paramList.Contains(parameter))
            {
                throw new ArgumentException(Utils.GetStr(MsgId.ParameterAlreadyAdded));
            }

            if (parameter.GetParameterEncoding() == null)
            {
                parameter.SetParameterEncoding(GetParametersEncoding());
            }

            try
            {
                parameter.Pos = cmdText.IndexOf(parameter.ParameterName);
                if (paramList.Count == 0 || parameter.Pos == -1)
                {
                    paramList.Add(parameter);
                }
                else
                {
                    for (int i = 0; i < paramList.Count; i++)
                    {
                        if (paramList[i].Pos > parameter.Pos)
                        {
                            paramList.Insert(IndexOf(paramList[i]), parameter);
                            break;
                        }
                    }
                    if (!paramList.Contains(parameter))
                    {
                        paramList.Add(parameter);
                    }
                }
            }
            catch
            {
                paramList.Add(parameter);
            }
            return(IndexOf(parameter));
        }