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; }
/// <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(); }
/// <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(); }
/// <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); } }
/// <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); } }