public static object InternalEvaluate(TParams AParams, String AExpression, SqlConnection AContextConnection = null) { if(AContextConnection == null) if(AParams == null) { AContextConnection = new SqlConnection(Const_ContextConnection); AContextConnection.Open(); } else { AParams.InitContextConnection(); AContextConnection = AParams.ContextConnection; } SqlCommand LSqlCommand = AContextConnection.CreateCommand(); LSqlCommand.CommandText = AExpression; //"SELECT (" + AExpression + ")"; LSqlCommand.CommandType = CommandType.Text; Sql.ParamsParser Parser = new Sql.ParamsParser ( AExpression, '@', TCommentMethods.None, new char[0], new char[] {'\''} ); while (Parser.MoveNext() && !String.IsNullOrEmpty(Parser.Current.Value)) if (LSqlCommand.Parameters.IndexOf('@' + Parser.Current.Value) == -1) { Object LValue; if (AParams != null && AParams.FData.TryGetValue(Parser.Current.Value, out LValue)) LSqlCommand.Parameters.AddWithValue('@' + Parser.Current.Value, LValue).Direction = ParameterDirection.Input; else LSqlCommand.Parameters.Add('@' + Parser.Current.Value, SqlDbType.VarChar, 1).Direction = ParameterDirection.Input; } return LSqlCommand.ExecuteScalar(); }
//[SqlFunction(Name = "Final SQL(Custom)", DataAccess = DataAccessKind.None, IsDeterministic = true)] // EXEC [A].[B] :Param1, :[Param2], :[$Params;Param2] public static String FinalSQLEx(String ASQL, UDT.TParams AParams, Boolean AOnlyQuoted) { if(String.IsNullOrEmpty(ASQL)) return ASQL; StringBuilder Result = new StringBuilder(ASQL.Length); Sql.ParamsParser Parser = new Sql.ParamsParser ( ASQL, ':', TCommentMethods.DoubleMinus | TCommentMethods.SlashRange, new char[] { '[' }, new char[] { '\'', '"', '[' } ); while (Parser.MoveNext()) { Result.Append(Parser.Current.Gap); Object LParamValue; if (!String.IsNullOrEmpty(Parser.Current.Value)) if (AOnlyQuoted && (Parser.Current.Quote == (Char)0)) { Result.Append(':'); Result.Append(Parser.Current.Value); } else if (AParams == null) Result.Append("NULL"); else if(Parser.Current.Value[0] == '$') { String LValues = (Parser.Current.Value.Length == 1 ? AParams.CastAsString() : AParams.CastAsStringCustom(Parser.Current.Value.Substring(1))); Result.Append(LValues == null ? "NULL" : Strings.QuoteString(LValues)); } else if(AParams.TryGetValue(Parser.Current.Value, out LParamValue)) { Result.Append(Sql.ValueToText(LParamValue, Sql.ValueDbStyle.SQL, '\'')); } else Result.Append("NULL"); } return Result.ToString(); }