這里的存儲過程是在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"; 其他的內容都變化,一樣可以得到相同的效果
|