public T ExecuteInterfaceMethod <T>(MethodInformation method, Action <T> action) { DataOptType dataOptType = ((IDataInterface)this).dataOptType; method.dataProviderNamespace = dataProviderNamespace; method.dataProviderClassName = dataProviderClassName; method.fields = fields; method.fieldsType = fieldsType; method.ResultExecMethod = ResultExecMethod; method.sqlExecType = sqlExecType; string sqlVarName = "sql"; DynamicCodeAutoCall dynamicCodeAutoCall = new DynamicCodeAutoCall(); sql = dynamicCodeAutoCall.ExecReplaceForSqlByFieldName(sql, sqlVarName, method); DynamicCodeChange dynamicCodeChange = new DynamicCodeChange(); try { dynamicCodeChange.AnalyzeSql(method, dataOptType, sqlVarName, ref sql); } catch (Exception ex) { e(ex.ToString(), ErrorLevels.severe); throw ex; } DynamicEntity dynamicEntity = new DynamicEntity(); T result = dynamicEntity.Exec <T>(method, dataOptType, action, sql); return(result); }
/// <summary> /// 执行select、insert、update、delete数据操作时被调用 /// </summary> /// <param name="method">接口方法信息对象</param> /// <param name="dataOptType">数据操作类型select|insert|update|delete</param> /// <param name="sql">sql语句表达式</param> /// <param name="code">接口方法代码相关代码字符串</param> protected void ExecInterfaceMethodOfCodeStr_DataOpt(MethodInformation method, DataOptType dataOptType, string sql, ref string code) { StackTrace stackTrace = new StackTrace(); Type type = stackTrace.GetFrame(1).GetMethod().DeclaringType; if (null == type.GetInterface("IDataInterface")) { e("调用该方法的类必须实例接口类 IDataInterface", ErrorLevels.severe); throw new Exception("调用该方法的类必须实例接口类 IDataInterface"); } string sqlVarName = "sql"; DynamicCodeChange dynamicCodeChange = new DynamicCodeChange(); try { dynamicCodeChange.AnalyzeSql(method, dataOptType, sqlVarName, ref sql); } catch (Exception ex) { e(ex.ToString(), ErrorLevels.severe); throw ex; } code = dynamicCodeAutoCall.ExecReplaceForSqlByFieldName(sql, sqlVarName, method); string paraListVarName = "null"; dynamicCodeAutoCall.DataProviderCode(sqlVarName, method, dataOptType, ref code, ref paraListVarName); if (string.IsNullOrEmpty(code) && string.IsNullOrEmpty(sql)) { e("没有提供任何执行语句", ErrorLevels.severe); throw new Exception("没有提供任何执行语句"); } string code1 = ""; if (dataOptType == DataOptType.select || dataOptType == DataOptType.count || DataOptType.procedure == dataOptType) { code1 = dynamicCodeAutoCall.GetParametersBySqlParameter(sql, method, ref paraListVarName); appendCode(method, code1, ref code); dynamicCodeAutoCall.MadeExecuteSql(sqlVarName, paraListVarName, method, dataOptType, ref code); } else { code1 = dynamicCodeChange.GetParametersBySqlParameter(sql, sqlVarName, method, dataOptType, ref paraListVarName); appendCode(method, code1, ref code); } }
DbList <DbParameter> GetDbParameters(MethodInformation method, DataEntity <DataElement> dataElements, string sql) { DbList <DbParameter> dbParameters = new DbList <DbParameter>(); if (string.IsNullOrEmpty(sql)) { return(dbParameters); } if (null == dataElements) { return(dbParameters); } string msg = ""; Regex rg = DynamicCodeChange.rgParaField; if (rg.IsMatch(sql) && 0 < method.paraList.Count) { if (null == method.paraList[0].ParaValue) { msg = "The parameter value cann't be null."; ((AutoCall)method.AutoCall).e(msg); throw new Exception(msg); } string LeftSign = ""; string DbTag = ""; string FieldName = ""; string EndSign = ""; object v = null; string sql1 = sql; Match m = null; int num = 0; //DataEntity<DataElement> dataElements = (DataEntity<DataElement>)method.paraList[0].ParaValue; MatchCollection mc = rg.Matches(sql); while (rg.IsMatch(sql1) && 1000 > num) { if ((method.methodComponent.IsAsync || method.methodComponent.EnabledBuffer) && 0 < method.methodComponent.Interval) { Thread.Sleep(method.methodComponent.Interval); } m = rg.Match(sql1); LeftSign = m.Groups["LeftSign"].Value; if (!DynamicCodeChange.isEnabledField(LeftSign)) { continue; } DbTag = m.Groups["DbTag"].Value; FieldName = m.Groups["FieldName"].Value; EndSign = m.Groups["EndSign"].Value; v = dataElements[FieldName].value; dbParameters.Add(FieldName, v); sql1 = sql1.Replace(m.Groups[0].Value, ""); sql1 = EndSign + sql1; num++; } } return(dbParameters); }