这里的存储过程是在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 output\nselect 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"; 其他的内容都变化,一样可以得到相同的效果
|