示例#1
0
        private void FinishParameter(List <int> LParameterIndexes, StringBuilder LResult, StringBuilder LParameterName, ref bool LInParameter)
        {
            string LParameterNameString = LParameterName.ToString().Substring(1);
            int    LParameterIndex      = Parameters.IndexOf(LParameterNameString);

            if (LParameterIndex >= 0)
            {
                SQLParameter LParameter = Parameters[LParameterIndex];
                if (FUseParameters)
                {
                    if (FUseOrdinalBinding || !LParameterIndexes.Contains(LParameterIndex))
                    {
                        LParameterIndexes.Add(LParameterIndex);
                    }
                    if (LParameter.Marker == null)
                    {
                        if (FUseOrdinalBinding)
                        {
                            LResult.Append("?");
                        }
                        else
                        {
                            LResult.Append(FParameterDelimiter + ConvertParameterName(LParameterNameString));
                        }
                    }
                    else
                    {
                        LResult.Append(LParameter.Marker);
                    }
                }
                else
                {
                    LResult.Append(LParameter.Literal);
                }
            }
            else
            {
                LResult.Append(LParameterName.ToString());
            }
            LInParameter = false;
        }
示例#2
0
        /// <summary> Sets the parameter specifying the names and types of the non-internal parameters. </summary>
        private void SetParameterDefinition()
        {
            StringBuilder result = new StringBuilder();

            for (int index = 0; index < _parameterIndexes.Length; index++)
            {
                SQLParameter parameter = Parameters[_parameterIndexes[index]];
                if (parameter.Direction != SQLDirection.Result)
                {
                    if (result.Length > 0)
                    {
                        result.Append(", ");
                    }

                    result.Append("@" + ConvertParameterName(parameter.Name) + " " + GetParamTypeDescriptor(parameter));
                    if (parameter.Direction != SQLDirection.In)
                    {
                        result.Append(" out");
                    }
                }
            }
            ((SqlParameter)_command.Parameters["@paramdef"]).Value = result.ToString();
        }
示例#3
0
        /// <summary> Sets the parameter specifying the names and types of the non-internal parameters. </summary>
        private void SetParameterDefinition()
        {
            StringBuilder LResult = new StringBuilder();

            for (int LIndex = 0; LIndex < FParameterIndexes.Length; LIndex++)
            {
                SQLParameter LParameter = Parameters[FParameterIndexes[LIndex]];
                if (LParameter.Direction != SQLDirection.Result)
                {
                    if (LResult.Length > 0)
                    {
                        LResult.Append(", ");
                    }

                    LResult.Append("@" + ConvertParameterName(LParameter.Name) + " " + GetParamTypeDescriptor(LParameter));
                    if (LParameter.Direction != SQLDirection.In)
                    {
                        LResult.Append(" out");
                    }
                }
            }
            ((SqlParameter)FCommand.Parameters["@paramdef"]).Value = LResult.ToString();
        }
示例#4
0
        /// <summary> Creates non-internal parameters on the provider. </summary>
        protected override void PrepareParameters()
        {
            // Prepare parameters
            for (int index = 0; index < _parameterIndexes.Length; index++)
            {
                SQLParameter parameter      = Parameters[_parameterIndexes[index]];
                SqlParameter mSSQLParameter = (SqlParameter)_command.CreateParameter();
                mSSQLParameter.ParameterName = String.Format("@{0}", ConvertParameterName(parameter.Name));
                switch (parameter.Direction)
                {
                case SQLDirection.Out:
                    mSSQLParameter.Direction = System.Data.ParameterDirection.Output;
                    break;

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

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

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

                if (parameter.Type is SQLStringType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.VarChar;
                    mSSQLParameter.Size      = ((SQLStringType)parameter.Type).Length;
                }
                else if (parameter.Type is SQLBooleanType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.Bit;
                }
                else if (parameter.Type is SQLByteArrayType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.Binary;
                    mSSQLParameter.Size      = ((SQLByteArrayType)parameter.Type).Length;
                }
                else if (parameter.Type is SQLIntegerType)
                {
                    switch (((SQLIntegerType)parameter.Type).ByteCount)
                    {
                    case 1:
                        mSSQLParameter.SqlDbType = SqlDbType.TinyInt;
                        break;

                    case 2:
                        mSSQLParameter.SqlDbType = SqlDbType.SmallInt;
                        break;

                    case 8:
                        mSSQLParameter.SqlDbType = SqlDbType.BigInt;
                        break;

                    default:
                        mSSQLParameter.SqlDbType = SqlDbType.Int;
                        break;
                    }
                }
                else if (parameter.Type is SQLNumericType)
                {
                    SQLNumericType type = (SQLNumericType)parameter.Type;
                    mSSQLParameter.SqlDbType = SqlDbType.Decimal;
                    mSSQLParameter.Scale     = type.Scale;
                    mSSQLParameter.Precision = type.Precision;
                }
                else if (parameter.Type is SQLFloatType)
                {
                    SQLFloatType type = (SQLFloatType)parameter.Type;
                    if (type.Width == 1)
                    {
                        mSSQLParameter.SqlDbType = SqlDbType.Real;
                    }
                    else
                    {
                        mSSQLParameter.SqlDbType = SqlDbType.Float;
                    }
                }
                else if (parameter.Type is SQLBinaryType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.Image;
                }
                else if (parameter.Type is SQLTextType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.Text;
                }
                else if (parameter.Type is SQLDateType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.DateTime;
                }
                else if (parameter.Type is SQLTimeType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.DateTime;
                }
                else if (parameter.Type is SQLDateTimeType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.DateTime;
                }
                else if (parameter.Type is SQLGuidType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.UniqueIdentifier;
                }
                else if (parameter.Type is SQLMoneyType)
                {
                    mSSQLParameter.SqlDbType = SqlDbType.Money;
                }
                else
                {
                    throw new ConnectionException(ConnectionException.Codes.UnknownSQLDataType, parameter.Type.GetType().Name);
                }
                _command.Parameters.Add(mSSQLParameter);
            }
        }
示例#5
0
        /// <summary> Generates a SQL Server type descriptor given a parameter definition. </summary>
        private static string GetParamTypeDescriptor(SQLParameter parameter)
        {
            if (parameter.Type is SQLStringType)
            {
                return("varchar(" + ((SQLStringType)parameter.Type).Length.ToString() + ")");
            }
            else if (parameter.Type is SQLBooleanType)
            {
                return("bit");
            }
            else if (parameter.Type is SQLByteArrayType)
            {
                return("binary(" + ((SQLByteArrayType)parameter.Type).Length.ToString() + ")");
            }
            else if (parameter.Type is SQLIntegerType)
            {
                switch (((SQLIntegerType)parameter.Type).ByteCount)
                {
                case 1:
                    return("tinyint");

                case 2:
                    return("smallint");

                case 8:
                    return("bigint");

                default:
                    return("int");
                }
            }
            else if (parameter.Type is SQLNumericType)
            {
                SQLNumericType type = (SQLNumericType)parameter.Type;
                return("decimal(" + type.Precision.ToString() + "," + type.Scale.ToString() + ")");
            }
            else if (parameter.Type is SQLFloatType)
            {
                SQLFloatType type = (SQLFloatType)parameter.Type;
                if (type.Width == 1)
                {
                    return("real");
                }
                else
                {
                    return("float");
                }
            }
            else if (parameter.Type is SQLBinaryType)
            {
                return("image");
            }
            else if (parameter.Type is SQLTextType)
            {
                return("text");                         // Q: Should this be NText or text
            }
            else if ((parameter.Type is SQLDateType) || (parameter.Type is SQLTimeType) || (parameter.Type is SQLDateTimeType))
            {
                return("datetime");
            }
            else if (parameter.Type is SQLGuidType)
            {
                return("uniqueidentifier");
            }
            else if (parameter.Type is SQLMoneyType)
            {
                return("money");
            }
            else
            {
                throw new ConnectionException(ConnectionException.Codes.UnknownSQLDataType, parameter.Type.GetType().Name);
            }
        }