예제 #1
0
        protected override void PrepareParameters()
        {
            // Prepare parameters
            SQLParameter parameter;

            for (int index = 0; index < _parameterIndexes.Length; index++)
            {
                parameter = Parameters[_parameterIndexes[index]];
                IBM.DB2Parameter dB2Parameter = (IBM.DB2Parameter)_command.CreateParameter();
                dB2Parameter.ParameterName = String.Format("@{0}{1}", parameter.Name, index.ToString());
                switch (parameter.Direction)
                {
                case SQLDirection.Out: dB2Parameter.Direction = System.Data.ParameterDirection.Output; break;

                case SQLDirection.InOut: dB2Parameter.Direction = System.Data.ParameterDirection.InputOutput; break;

                case SQLDirection.Result: dB2Parameter.Direction = System.Data.ParameterDirection.ReturnValue; break;

                default: dB2Parameter.Direction = System.Data.ParameterDirection.Input; break;
                }

                if (parameter.Type is SQLStringType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.VarChar;
                    dB2Parameter.Size    = ((SQLStringType)parameter.Type).Length;
                }
                else if (parameter.Type is SQLBooleanType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Integer;
                }
                else if (parameter.Type is SQLIntegerType)
                {
                    switch (((SQLIntegerType)parameter.Type).ByteCount)
                    {
                    case 1: dB2Parameter.DB2Type = IBM.DB2Type.Integer; break;

                    case 2: dB2Parameter.DB2Type = IBM.DB2Type.SmallInt; break;

                    case 8: dB2Parameter.DB2Type = IBM.DB2Type.BigInt; break;

                    default: dB2Parameter.DB2Type = IBM.DB2Type.Integer; break;
                    }
                }
                else if (parameter.Type is SQLNumericType)
                {
                    SQLNumericType type = (SQLNumericType)parameter.Type;
                    dB2Parameter.DB2Type   = IBM.DB2Type.Decimal;                   // could not be decimal because of issue with DB2/400
                    dB2Parameter.Scale     = type.Scale;
                    dB2Parameter.Precision = type.Precision;
                }
                else if (parameter.Type is SQLFloatType)
                {
                    SQLFloatType type = (SQLFloatType)parameter.Type;
                    if (type.Width == 1)
                    {
                        dB2Parameter.DB2Type = IBM.DB2Type.Real;
                    }
                    else
                    {
                        dB2Parameter.DB2Type = IBM.DB2Type.Double;
                    }
                }
                else if (parameter.Type is SQLBinaryType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Blob;
                }
                else if (parameter.Type is SQLTextType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Clob;
                }
                else if (parameter.Type is SQLDateTimeType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Timestamp;
                }
                else if (parameter.Type is SQLDateType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Date;
                }
                else if (parameter.Type is SQLTimeType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Time;
                }
                else if (parameter.Type is SQLGuidType)
                {
                    dB2Parameter.DB2Type = IBM.DB2Type.Char;
                    dB2Parameter.Size    = 24;
                }
                else if (parameter.Type is SQLMoneyType)
                {
                    dB2Parameter.DB2Type   = IBM.DB2Type.Decimal;
                    dB2Parameter.Scale     = 28;
                    dB2Parameter.Precision = 8;
                }
                else
                {
                    throw new ConnectionException(ConnectionException.Codes.UnknownSQLDataType, parameter.Type.GetType().Name);
                }
                _command.Parameters.Add(dB2Parameter);
            }
        }
예제 #2
0
        private void PrepareParameters()
        {
            // Prepare parameters
            SQLParameter parameter;

            for (int index = 0; index < _parameterIndexes.Length; index++)
            {
                parameter = Parameters[_parameterIndexes[index]];
                ADODB.Parameter aDOParameter = _command.CreateParameter(parameter.Name, ADODB.DataTypeEnum.adInteger, ADODB.ParameterDirectionEnum.adParamInput, 0, Missing.Value);
                switch (parameter.Direction)
                {
                case SQLDirection.In: aDOParameter.Direction = ADODB.ParameterDirectionEnum.adParamInput; break;

                case SQLDirection.Out: aDOParameter.Direction = ADODB.ParameterDirectionEnum.adParamOutput; break;

                case SQLDirection.InOut: aDOParameter.Direction = ADODB.ParameterDirectionEnum.adParamInputOutput; break;

                case SQLDirection.Result: aDOParameter.Direction = ADODB.ParameterDirectionEnum.adParamReturnValue; break;

                default: aDOParameter.Direction = ADODB.ParameterDirectionEnum.adParamUnknown; break;
                }

                if (parameter.Type is SQLStringType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adVarChar;
                    aDOParameter.Size = ((SQLStringType)parameter.Type).Length;
                }
                else if (parameter.Type is SQLBooleanType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adBoolean;
                }
                else if (parameter.Type is SQLIntegerType)
                {
                    switch (((SQLIntegerType)parameter.Type).ByteCount)
                    {
                    case 1: aDOParameter.Type = ADODB.DataTypeEnum.adTinyInt; break;

                    case 2: aDOParameter.Type = ADODB.DataTypeEnum.adSmallInt; break;

                    case 8: aDOParameter.Type = ADODB.DataTypeEnum.adBigInt; break;

                    default: aDOParameter.Type = ADODB.DataTypeEnum.adInteger; break;
                    }
                }
                else if (parameter.Type is SQLNumericType)
                {
                    SQLNumericType type = (SQLNumericType)parameter.Type;
                    aDOParameter.Type         = ADODB.DataTypeEnum.adNumeric;
                    aDOParameter.NumericScale = type.Scale;
                    aDOParameter.Precision    = type.Precision;
                }
                else if (parameter.Type is SQLFloatType)
                {
                    SQLFloatType type = (SQLFloatType)parameter.Type;
                    if (type.Width == 1)
                    {
                        aDOParameter.Type = ADODB.DataTypeEnum.adSingle;
                    }
                    else
                    {
                        aDOParameter.Type = ADODB.DataTypeEnum.adDouble;
                    }
                }
                else if (parameter.Type is SQLBinaryType)
                {
                    aDOParameter.Type        = ADODB.DataTypeEnum.adLongVarBinary;
                    aDOParameter.Attributes |= (int)ADODB.ParameterAttributesEnum.adParamLong;
                    aDOParameter.Size        = 255;
                }
                else if (parameter.Type is SQLByteArrayType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adBinary;
                    aDOParameter.Size = ((SQLByteArrayType)parameter.Type).Length;
                }
                else if (parameter.Type is SQLTextType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adLongVarChar;
                    aDOParameter.Size = 255;
                }
                else if (parameter.Type is SQLDateTimeType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adDBTimeStamp;
                }
                else if (parameter.Type is SQLDateType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adDBDate;
                }
                else if (parameter.Type is SQLTimeType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adDBTime;
                }
                else if (parameter.Type is SQLGuidType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adChar;
                    aDOParameter.Size = 38;
                    //LADOParameter.Type = ADODB.DataTypeEnum.adGUID;
                }
                else if (parameter.Type is SQLMoneyType)
                {
                    aDOParameter.Type = ADODB.DataTypeEnum.adCurrency;
                }
                else
                {
                    throw new ConnectionException(ConnectionException.Codes.UnknownSQLDataType, parameter.Type.GetType().Name);
                }
                _command.Parameters.Append(aDOParameter);
            }
        }