利用数据库进行表达式运算
2010-07-21 17:26
211 查看
正常情况下来了一串表达式,首先需要对表达式进行解析成逆波兰式,然后再通过堆栈来完成表达式的运算,现在数据库几乎遍及所有运行系统,我们可以通过数据库的存储过程来完成表达式的运算,再不用自己费心费神了。(下面采用的环境:SQL 2000 + C#)
存储过程:
CREATE PROCEDURE SYS_CALCULATE(
@EXPRESS VARCHAR(50),
@RESULT FLOAT OUTPUT)
AS
BEGIN
SET @RESULT = 0
DECLARE @SQL NVARCHAR(256)
SET @SQL = 'SELECT @RESULT=' + @EXPRESS
EXEC SP_EXECUTESQL @SQL , N'@RESULT FLOAT OUTPUT' , @RESULT OUTPUT
END
调用存储过程进行数值运算:
public enumErrorCode Calculate(string strExpress, out float fResult)
{
try
{
SqlConnection conn;
if (ConnectDB(out conn))
{
SqlCommand command = new SqlCommand("SYS_CALCULATE", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("EXPRESS", strExpress));
SqlParameter param1 = new SqlParameter("RESULT", SqlDbType.Float);
param1.Direction = ParameterDirection.Output;
command.Parameters.Add(param1);
command.ExecuteNonQuery();
fResult = float.Parse(param1.Value.ToString());
conn.Close();
return enumErrorCode.enumSuccess;
}
else
{
fResult = 0;
return enumErrorCode.enumConnectError;
}
}
catch (SqlException e)
{
fResult = 0;
return enumErrorCode.enumException;
}
}
存储过程:
CREATE PROCEDURE SYS_CALCULATE(
@EXPRESS VARCHAR(50),
@RESULT FLOAT OUTPUT)
AS
BEGIN
SET @RESULT = 0
DECLARE @SQL NVARCHAR(256)
SET @SQL = 'SELECT @RESULT=' + @EXPRESS
EXEC SP_EXECUTESQL @SQL , N'@RESULT FLOAT OUTPUT' , @RESULT OUTPUT
END
调用存储过程进行数值运算:
public enumErrorCode Calculate(string strExpress, out float fResult)
{
try
{
SqlConnection conn;
if (ConnectDB(out conn))
{
SqlCommand command = new SqlCommand("SYS_CALCULATE", conn);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("EXPRESS", strExpress));
SqlParameter param1 = new SqlParameter("RESULT", SqlDbType.Float);
param1.Direction = ParameterDirection.Output;
command.Parameters.Add(param1);
command.ExecuteNonQuery();
fResult = float.Parse(param1.Value.ToString());
conn.Close();
return enumErrorCode.enumSuccess;
}
else
{
fResult = 0;
return enumErrorCode.enumConnectError;
}
}
catch (SqlException e)
{
fResult = 0;
return enumErrorCode.enumException;
}
}
相关文章推荐
- C++_利用栈进行运算符表达式的运算
- 中缀表达式生成二叉树并利用后缀表达式进行求值运算
- 【Servlet】利用JSTL表达式,C标签的循环与判断,对数据库查询内容进行分页
- [Java算法分析与设计]利用栈操作中缀表达式和后缀表达式的转换和运算
- 利用栈进行表达式求解
- 利用tox工具对keystone在py27下进行单元测试,如何让其在非本地数据库执行
- Linq从两个edmx(两个数据库)中选取数据进行查找出现错误解决 (指定的 LINQ 表达式包含对与不同上下文关联的查询)
- Objective-C利用正则表达式进行搜索时正则关键字的转义
- python利用MySQLdb模块进行数据库的连接实现增查操作
- 在正则表达式中进行判断(三目运算)
- C/C++利用位运算来进行函数参数检查
- 利用SQL2000的DTS来进行数据库的转换!(转换成ACCESS数据库)
- SED,AWK学习笔记Part 1-----利用正则表达式进行文本匹配[转]
- 利用python进行数据分析-数据聚合与分组运算2
- 利用逆波兰表达式(后缀表达式)解析四则运算表达式的详细源代码及解释
- 利用正则表达式 进行字符的判断
- 利用SQL语句进行添加、删除、修改字段,表与字段的基本操作,数据库备份等
- 如何利用堆栈及逆波兰表达式进行数学四则运算(C语言版)
- 利用正则表达式,对String对象进行替换与分割
- 如何利用异或运算进行简单加密解密