/// <summary> /// Creates the <see cref="OracleParameter"/> for the return value /// </summary> /// <typeparam name="T">The expected type to be returned</typeparam> /// <param name="cmd">The oracle command to add the parameter to</param> /// <returns>The return oracle parameter</returns> private OracleParameter CreateReturnParameter <T>(OracleCommand cmd) { var ret = ParamHandler.CreateReturnParam <T>(); cmd.Parameters.Add(ret); return(ret); }
public CreateWindows() { InitializeComponent(); this.Closing += CreateWindows_Closing; ports = new PortList(); this.listPort.ItemsSource = ports; //初始化参数 Settings = new List <Setting>(); //读取配置文件 if (ConfigurationManager.AppSettings.AllKeys.Contains("mode")) { Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); string config = configuration.AppSettings.Settings["mode"].Value.ToString(); var cfgs = config.Split(';'); foreach (var cfg in cfgs) { var cs = cfg.Split(','); Setting setting = new Setting() { VarName = cs[0], VarValue = cs[1], VarHandle = cs[2] }; Settings.Add(setting); } } else { ParamHandler.Save2Conf("mode", "默认配置,1.25,no"); Settings.Add(DefaultSetting); } //下拉框绑定数据源 cbSet.ItemsSource = Settings; cbSet.SelectedItem = Settings.Where(p => p.VarName.Equals("默认配置")).FirstOrDefault(); }
public void Add(ParamHandler handler, params object[] param) { Handler hd = new Handler(handler, param); if (!this.RunHandler(hd)) { lock (this.handlers) this.handlers.Add(hd); } }
public bool Contains(ParamHandler handler) { lock (this.handlers) { for (int i = 0; i < this.handlers.Count; i++) { if (this.handlers[i].handler == handler) { return(true); } } } return(false); }
/// <summary> /// Executes an Oracle Function /// </summary> /// <typeparam name="T">The espected result of the oracle function</typeparam> /// <param name="function">The function to execute, which follows this format: schema.function or schema.package.function</param> /// <param name="parameters">The parameters of the function whether IN, OUT or IN OUT</param> /// <remarks>The OUT and IN OUT parameters get their values set by this method</remarks> /// <returns>The result of the execution and containing the return value if it is successful</returns> protected T ExecuteFunction <T>(string function, params Param[] parameters) { using (var cmd = CreateCommandAndOpenConnection(function, CommandType.StoredProcedure)) { var ret = CreateReturnParameter <T>(cmd); ExecuteInner(cmd, parameters); try { return(ParamHandler.ConvertOracleParameterToBaseType <T>(ret)); } catch (Exception ex) { throw new Exception($"Error converting the return value to type {typeof(T).Name} " + $"in function {function}. See inner exception for details", ex); } } }
// public string RecursivelyGetParam(Type type) // { // if (type.IsByRef) // { // return RecursivelyGetParam(type.GetElementType()); // } // if (!type.IsArray) // { // // } // } // Editor only public static ParamHandler Get_ParamHandler(Type type, int paramIndex, bool isRef, bool isOut) { var ph = new ParamHandler(); ph.argName = "arg" + paramIndex; if (IsDelegateDerived(type)) { Debug.LogError("Delegate derived class should not get here"); return(ph); } bool bTOrContainsT = type.IsGenericParameter || type.ContainsGenericParameters; string typeFullName; if (bTOrContainsT) { typeFullName = "object"; } else { typeFullName = JSNameMgr.GetTypeFullName(type); } if (type.IsArray) { ph.getter = new StringBuilder() .AppendFormat("{0} {1} = {2};", typeFullName, ph.argName, arrayExchange.Get_GetParam(type)) .ToString(); } else { if (isRef || isOut) { type = type.GetElementType(); } string keyword = GetMetatypeKeyword(type); if (keyword == string.Empty) { Debug.LogError("keyword is empty: " + type.Name); return(ph); } if (isOut) { ph.getter = new StringBuilder() .AppendFormat("int r_arg{0} = JSApi.incArgIndex();\n", paramIndex) .AppendFormat(" {0} {1}{2};", typeFullName, ph.argName, bTOrContainsT ? " = null" : "") .ToString(); } else if (isRef) { ph.getter = new StringBuilder() .AppendFormat("int r_arg{0} = JSApi.getArgIndex();\n", paramIndex) .AppendFormat("{0} {1} = ({0}){2}((int)JSApi.GetType.ArgRef);", typeFullName, ph.argName, keyword) .ToString(); } else { ph.getter = new StringBuilder() .AppendFormat("{0} {1} = ({0}){2}((int)JSApi.GetType.Arg);", typeFullName, ph.argName, keyword) .ToString(); } if (isOut || isRef) { var _sb = new StringBuilder(); if (bTOrContainsT) { // TODO // sorry, 'arr_t' is written in CSGenerator2.cs _sb.AppendFormat(" {0} = arr_t[{1}];\n", ph.argName, paramIndex); } ph.updater = _sb.AppendFormat(" JSApi.setArgIndex(r_arg{0});\n", paramIndex) .AppendFormat(" {0}((int)JSApi.SetType.ArgRef, {1});\n", keyword.Replace("get", "set"), ph.argName) .ToString(); } } return(ph); }
// public string RecursivelyGetParam(Type type) // { // if (type.IsByRef) // { // return RecursivelyGetParam(type.GetElementType()); // } // if (!type.IsArray) // { // // } // } // Editor only public static ParamHandler Get_ParamHandler(Type type, int paramIndex, bool isRef, bool isOut) { ParamHandler ph = new ParamHandler(); ph.argName = "arg" + paramIndex.ToString(); if (IsDelegateDerived(type)) { Debug.LogError("Delegate derived class should not get here"); return ph; } bool bTOrContainsT = (type.IsGenericParameter || type.ContainsGenericParameters); string typeFullName; if (bTOrContainsT) typeFullName = "object"; else typeFullName = JSNameMgr.GetTypeFullName(type); if (type.IsArray) { ph.getter = new StringBuilder() .AppendFormat("{0} {1} = {2};", typeFullName, ph.argName, arrayExchange.Get_GetParam(type)) .ToString(); } else { if (isRef || isOut) { type = type.GetElementType(); } string keyword = GetMetatypeKeyword(type); if (keyword == string.Empty) { Debug.LogError("keyword is empty: " + type.Name); return ph; } if (isOut) { ph.getter = new StringBuilder() .AppendFormat("int r_arg{0} = JSApi.incArgIndex();\n", paramIndex) .AppendFormat(" {0} {1}{2};", typeFullName, ph.argName, bTOrContainsT ? " = null" : "") .ToString(); } else if (isRef) { ph.getter = new StringBuilder() .AppendFormat("int r_arg{0} = JSApi.getArgIndex();\n", paramIndex) .AppendFormat("{0} {1} = ({0}){2}((int)JSApi.GetType.ArgRef);", typeFullName, ph.argName, keyword) .ToString(); } else { ph.getter = new StringBuilder() .AppendFormat("{0} {1} = ({0}){2}((int)JSApi.GetType.Arg);", typeFullName, ph.argName, keyword) .ToString(); } if (isOut) { var _sb = new StringBuilder(); if (bTOrContainsT) { // TODO // sorry, 'arr_t' is written in CSGenerator2.cs _sb.AppendFormat(" {0} = arr_t[{1}];\n", ph.argName, paramIndex); } ph.updater = _sb.AppendFormat(" JSApi.setArgIndex(r_arg{0});\n", paramIndex) .AppendFormat(" {0}((int)JSApi.SetType.ArgRef, {1});\n", keyword.Replace("get", "set"), ph.argName) .ToString(); } } return ph; }
// Editor only public static ParamHandler Get_ParamHandler(Type type, int paramIndex, bool isRef, bool isOut) { ParamHandler ph = new ParamHandler(); ph.argName = "arg" + paramIndex.ToString(); if (IsDelegateDerived(type)) { Debug.LogError("Delegate derived class should not get here"); return(ph); } bool bTOrContainsT = (type.IsGenericParameter || type.ContainsGenericParameters); string typeFullName; if (bTOrContainsT) { typeFullName = "object"; } else { typeFullName = JSNameMgr.CsFullName(type); } if (isRef || isOut) { type = type.GetElementType(); } if (type.IsArray) { ph.getter = new TextFile() .Add("{0} {1} = ", typeFullName, ph.argName) .In() .Add(arrayExchange.Get_GetParam(type).Ch) .Out() .Add(";"); } else { bool needCast; string keyword = GetMetatypeKeyword(type, out needCast); if (keyword == string.Empty) { Debug.LogError("keyword is empty: " + type.Name); return(ph); } if (isOut) { ph.getter = new TextFile() .Add("int r_arg{0} = JSApi.incArgIndex();", paramIndex) .Add("{0} {1}{2};", typeFullName, ph.argName, bTOrContainsT ? " = null" : ""); } else if (isRef) { ph.getter = new TextFile() .Add("int r_arg{0} = JSApi.getArgIndex();", paramIndex) .Add("{0} {1} = ({0}){2}((int)JSApi.GetType.ArgRef);", typeFullName, ph.argName, keyword); } else { if (needCast) { ph.getter = new TextFile() .Add("{0} {1} = ({0}){2}((int)JSApi.GetType.Arg);", typeFullName, ph.argName, keyword); } else { ph.getter = new TextFile() .Add("{0} {1} = {2}((int)JSApi.GetType.Arg);", typeFullName, ph.argName, keyword); } } if (isOut || isRef) { TextFile tf = new TextFile(); if (bTOrContainsT) { // TODO // sorry, 'arr_t' is written in CSGenerator2.cs tf.Add("{0} = arr_t[{1}];", ph.argName, paramIndex); } tf.Add("JSApi.setArgIndex(r_arg{0});", paramIndex) .Add("{0}((int)JSApi.SetType.ArgRef, {1});", keyword.Replace("get", "set"), ph.argName); ph.updater = tf; } } return(ph); }
public static void Run(ParamHandler handler, params object[] param) { Instance.Add(handler, param); }
public Handler(ParamHandler handler, object[] param) { this.handler = handler; this.param = param; }