数据库里的计算公式,怎么在程序里按数据库的计算公式计算? 比如 数据库里公式为 c=a*b那我在程序里调用这个公式再进行计算? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把这个公式用程序出来来后可以还是用数据库的方式去执行,比如用Select a*b返回c的值. 新建一个类: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>"); }这个应该能满足要求 帮忙看下这个方法有什么不对劲么? 在请javascript高手指点 前贴已经结贴 往高手继续指教 需求改变 在线等高手! 如何在这里加入复选框 做一个安全的网站,在写代码时需要注册什么呢? 收藏RSS 谁用用ASP.NET 做过后台管理啊?特别是权限设计 如何获得页面的URL VS2005的中英文版本会有差别么? 如何设置session永不过期? 谁有vs.net的报表控件crystal report的注册码。 薪酬计算公式问题?烦~烦~烦~烦~烦~烦~烦~烦~烦~烦~烦~ 讨论:MasterPage和FrameSet框架能否相互互补?
Select a*b
返回c的值.
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>");
}
这个应该能满足要求