比如 数据库里公式为 c=a*b那我在程序里调用这个公式再进行计算?

解决方案 »

  1.   

    把这个公式用程序出来来后可以还是用数据库的方式去执行,比如用
    Select a*b
    返回c的值.
      

  2.   

    新建一个类:
    using System;
    using System.CodeDom.Compiler;
    using System.Reflection;
    using System.Text;
    using Microsoft.CSharp;   
    namespace YYC.BLL
    {
        /**////   <summary>   
        ///   计算表达式的类   
        ///   </summary>   
        public class CalculateExpression
        {
            /**////   <summary>   
            ///   接受一个string类型的表达式并计算结果,返回一个object对象,静态方法   
            ///   </summary>   
            ///   <param   name="expression"></param>   
            ///   <returns></returns>   
            public static object Calculate(string expression)
            {
                string className = "Calc";
                string methodName = "Run";
                expression = expression.Replace("/", "*1.0/");            //   创建编译器实例。     
                CodeDomProvider complier = (new Microsoft.CSharp.CSharpCodeProvider());
                //   设置编译参数。     
                CompilerParameters paras = new CompilerParameters();
                paras.GenerateExecutable = false;
                paras.GenerateInMemory = true;            //   创建动态代码。     
                StringBuilder classSource = new StringBuilder();
                classSource.Append("public   class   " + className + "\n");
                classSource.Append("{\n");
                classSource.Append("         public   object   " + methodName + "()\n");
                classSource.Append("         {\n");
                classSource.Append("                 return   " + expression + ";\n");
                classSource.Append("         }\n");
                classSource.Append("}");            //   编译代码。     
                CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());            //   获取编译后的程序集。     
                Assembly assembly = result.CompiledAssembly;            //   动态调用方法。     
                object eval = assembly.CreateInstance(className);
                MethodInfo method = eval.GetType().GetMethod(methodName);
                object reobj = method.Invoke(eval, null);
                GC.Collect();
                return reobj;
            }
        }
    }
    //   调用:
        protected void Page_Load(object sender, EventArgs e)
        {   
            //string str = "(a+b)/c-d";  进行参数的转化
            string a = "2", b = "3", c = "4", d = "1";
            string str = "("+a.ToString()+"+"+b.ToString()+")"+"/"+c.ToString()+"-"+d.ToString();
            // string str = "(2+12)/4-1";   实际参数
           
            this.Response.Write("<script>alert('" + str + "');</script>");
            double result;
            result = (double)YYC.BLL.CalculateExpression.Calculate(str);
            this.Response.Write("<script>alert('" + result + "');</script>");
        }
    这个应该能满足要求