Example #1
0
        public void SetParameters(VirtuosoParameterCollection parameters)
        {
            this.parameters = parameters;
            if (parameters == null)
            {
                parameterValues = new object[0];
                return;
            }

            parameterValues = new object[parameters.Count];
            for (int i = 0; i < parameters.Count; i++)
            {
                VirtuosoParameter param = (VirtuosoParameter)parameters[i];
                Debug.WriteLineIf(Switch.Enabled, "  param: " + param.paramName);

                object value = null;
                if (param.Direction == ParameterDirection.Input ||
                    param.Direction == ParameterDirection.InputOutput)
                {
                    value = param.Value;
                    if (param.bufferType == null)
                    {
                        if (param.paramType != null)
                        {
                            param.bufferType = param.paramType.bufferType;
                        }
                        else if (value == null || Convert.IsDBNull(value))
                        {
                            param.bufferType = VirtuosoParameter.defaultType.bufferType;
                        }
                        else
                        {
                            param.bufferType = BufferTypes.InferBufferType(value);
                        }
                        if (param.bufferType == null)
                        {
                            throw new InvalidOperationException("Cannot infer parameter type");
                        }
                    }
                    value = param.bufferType.ConvertValue(param.Value);
                }
                Debug.WriteLineIf(Switch.Enabled, "  value: " + param.Value);
                if (value is System.String)
                {
                    BoxTag tag = (param.DbType == DbType.AnsiString ? BoxTag.DV_STRING : BoxTag.DV_WIDE);
                    parameterValues[i] = ExplicitString.CreateExplicitString((String)value, tag, connection);
                }
                else
                {
                    parameterValues[i] = value;
                }
            }
        }