コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: AutoCall.cs プロジェクト: daijiu77/ImplementFactory
        /// <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);
            }
        }
コード例 #3
0
        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);
        }