直播中
OUTPUT 變量必須在創(chuàng)建表和使用該變量時(shí)都進(jìn)行定義。參數(shù)名和變量名不一定要匹配,不過(guò)數(shù)據(jù)類型和參數(shù)位置必須匹配
我們創(chuàng)建一個(gè)最簡(jiǎn)單的存儲(chǔ)過(guò)程
CREATE PROCEDURE test
(@subject Varchar(15) Output)
AS
select @subject='豆腐制作 都是精品'
GO
可是如何取得回掉的參數(shù)呢?白思不得其解,后來(lái)終于在SQL AnaLyzer 上得到了啟發(fā),
DECLARE @aa Varchar(10)
execute test @aa output
select aa=@aa
根據(jù)這個(gè),我們可在Asp.Net中利用ADO+的多語(yǔ)句處理功能來(lái)實(shí)現(xiàn)我們的設(shè)想,最終通過(guò)SQLDataReader 如同
Select 語(yǔ)句一樣來(lái)得到輸出,完整的程序如下。
<%@ 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>測(cè)試存儲(chǔ)過(guò)程</title>
</head>
<body>
<asp:Label id=showmsg runat=server />
</body>
</html>
其實(shí),豆腐在實(shí)際的應(yīng)用中一般是很少使用output 參數(shù)的,豆腐一般都是這樣使用的:
存儲(chǔ)過(guò)程 的內(nèi)容如下:
CREATE PROCEDURE test
AS
select @subject='豆腐制作 都是精品'
select aa=@subject
GO
就是在 存儲(chǔ)過(guò)程 的最后依據(jù)利用 Select 讓存儲(chǔ)過(guò)程返回一個(gè)記錄集合,然后我們就可以把這個(gè)存儲(chǔ)過(guò)程
看作是一個(gè) select 語(yǔ)句來(lái)處理了,這樣下來(lái),asp.Net 的SQL 語(yǔ)句就變成了
strSQL="test";
其他的內(nèi)容都變化,一樣可以得到相同的效果