
 
 | 
| 技术资料  > .Net专区 > 数据库应用 : 如何在aspx中得到在存储过程中的的数值(兼答jspfuns的 |  
如何在aspx中得到在存储过程中的的数值(兼答jspfuns的 March 25,2004 |  
这里的存储过程是在SQL Server 下的存储过程,由于目前豆腐没有使用存储过程,所以豆腐在举例子的时候 
使用了SQL2K,估计在Oracle下应该也是一样的,欢迎大家 和豆腐一起来探讨这个问题 
我们知道在存储过程中有个被称做output 的参数,他可以在不同的存储过程之中互相的传递参数,在使用output 的时候 
要注意下面的情况 
 
OUTPUT 变量必须在创建表和使用该变量时都进行定义。参数名和变量名不一定要匹配,不过数据类型和参数位置必须匹配 
我们创建一个最简单的存储过程 
CREATE PROCEDURE test 
(@subject Varchar(15) Output) 
AS 
select @subject='豆腐制作 都是精品' 
GO 
可是如何取得回掉的参数呢?白思不得其解,后来终于在SQL AnaLyzer 上得到了启发, 
DECLARE @aa Varchar(10) 
execute test @aa output 
select aa=@aa 
根据这个,我们可在Asp.Net中利用ADO+的多语句处理功能来实现我们的设想,最终通过SQLDataReader 如同 
Select 语句一样来得到输出,完整的程序如下。 
 
<%@ Import Namespace="System.IO" %> 
<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.SQL" %> 
<script language="C#" runat=server> 
protected void Page_Load(Object Src, EventArgs E){ 
SQLDataReader dbRead; 
SQLCommand dbComm; 
String strSQL; 
String strConn; 
SQLConnection conn; 
Hashtable Cfg=new Hashtable(); 
Cfg = (Hashtable)Context.GetConfig("appsettings"); 
strConn=Cfg["Conn"].ToString(); 
conn = new SQLConnection(strConn); 
strSQL="DECLARE @aa Varchar(10)nexecute test @aa outputnselect aa=@aa"; 
dbComm = new SQLCommand(strSQL, conn); 
dbComm.ActiveConnection.Open(); 
dbComm.Execute(out dbRead); 
dbRead.Read(); 
showmsg.Text=dbRead["aa"].ToString(); 
} 
</script> 
<html> 
<head> 
<title>测试存储过程</title> 
</head> 
<body> 
<asp:Label id=showmsg runat=server /> 
</body> 
</html> 
其实,豆腐在实际的应用中一般是很少使用output 参数的,豆腐一般都是这样使用的: 
存储过程 的内容如下: 
CREATE PROCEDURE test 
AS 
select @subject='豆腐制作 都是精品' 
select aa=@subject 
GO 
就是在 存储过程 的最后依据利用 Select 让存储过程返回一个记录集合,然后我们就可以把这个存储过程 
看作是一个 select 语句来处理了,这样下来,asp.Net 的SQL 语句就变成了 
strSQL="test"; 
其他的内容都变化,一样可以得到相同的效果 
         
         |  
 
 | 
  
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved