国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

探討SQL Server存儲過程

2024-08-31 00:51:45
字體:
來源:轉載
供稿:網友

A.      獲取存儲過程的ReturnValue值
用了這么長時間的.NET了,竟然連怎么獲取存儲過程的返回值都不知道,真是失敗。
在網上搜了一下,就知道怎么用了。
Input 此參數只用于將信息從應用程序傳輸到存儲過程。
InputOutput 此參數可將信息從應用程序傳輸到存儲過程,并將信息從存儲過程傳輸回應用程序。
Output 此參數只用于將信息從存儲過程傳輸回應用程序。
ReturnValue 此參數表示存儲過程的返回值。SQL Server 的存儲過程參數列表中不顯示該參數。它只與存儲過程的 RETURN 語句中的值相關聯。

  存儲過程為主鍵生成新值后,通常使用存儲過程中的 RETURN 語句返回該值,因此用來訪問該值的參數類型是 ReturnValue 參數。
  ReturnValue 參數與其他類型的參數有一個重要的區別。通常,在 ADO.NET 中為 Command 對象配置的參數的順序并不重要。參數名稱只用來與存儲過程中相應的參數相匹配。但是,對于 ReturnValue 參數,它必須是列表中的第一個參數。
  也就是說,為 Command 對象配置 ReturnValue 參數時,必須首先在代碼中配置該參數,這樣它才能獲取集合中的第一個數字索引。如果先配置任何其他參數,ReturnValue 參數將不能正常工作。
  呵呵,這樣就可以了
args[0] = new SqlParameter("@RETURN_VALUE", SqlDbType.Int );
args[0].Direction = ParameterDirection.ReturnValue;

取回值的時候用args[0].Value.ToString()

B.獲得SQL-server存儲過程的返回值存儲過程為:

    ///<summary>
    ///c#code,獲得SQL-server存儲過程的返回值
    ///<summary>
    SqlParameter[] sp = new SqlParameter[5];
   sp[0]=new SqlParameter("@Name",SqlDbType.VarChar);
   sp[0].Value=this.TextName.Text;
   sp[1]=new SqlParameter("@Text",SqlDbType.Text);
   sp[1].Value=this.TextTxt.Text;
   sp[2]=new SqlParameter("@Comment",SqlDbType.Text);
   sp[2].Value=this.TextComment.Text;
   sp[3]=new System.Data.SqlClient.SqlParameter("ReturnValue",System.Data.SqlDbType.Int,4,System.Data.ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null);
   //參數"ReturnValue",System.Data.ParameterDirection.ReturnValue聲明此參數為返回值。
   sp[4]=new SqlParameter("@Type",SqlDbType.Int);
   sp[4].Value=int.Parse(this.ClickBox.SelectedItem.Value);
   _SQL.ExecuteSP("us_styletextnew",sp);
   //使用sp[3].Value.ToString()即可!

存儲過程為:

CREATE PROCEDURE [dbo].[us_styletextnew]
 @id int=0,
 @Name varchar(50),
 @Text text,
 @Comment text,
 @Type int
AS
SET NOCOUNT ON
IF not EXISTS(SELECT [Name] FROM [dbo].[iStyle] WHERE [Name] = @Name)
BEGIN
 INSERT INTO
  [dbo].[iStyle]
  ([Name],
  [Text],
  [Comment],
  [Type])
 VALUES
  (@Name,@Text,@Comment,@Type)
 
 SET @id = SCOPE_IDENTITY()
END
RETURN @id
GO

希望對剛學存儲過程的朋友有點幫助!

 

用過SQLHelper的朋友,一定很懷疑SQLHelper怎么不能執行帶輸出、返回參數的存儲過程呢?請參考 http://blog.joycode.com/ghj/archive/2004/04/12/19015.aspx

此文并沒有做成相應的解決方法,所以這也是寫本文的一個出發點。原因值需要修改存儲過程中RETURN @id為SELECT @id,取值采用SqlHelper.ExecuteScalar 方法.其中原理并沒有違背SqlHelper.ExecuteScalar取第一行一列的值。

string aa= SqlHelper.ExecuteScalar(SqlHelper.CONN_STRING,"PRO_Table1_OPER",sp).ToString();

C.如何在存儲過程中引用別的存儲過程返回的表

1.       一般的方法認為只有把存儲過程返回的值,寫入一個結構相同的
輔助表中,如下:
create procedure proc1
as
begin
create table #t(...) --表結構同被調用存儲過程返回結果集的結構

insert #t exec proc2

select * from #t left join table on ...
end
go

2。還有一個方面就是用openrowset(不過就是速度不怎么樣)
select * from openrowset('sqloledb'
,'Trusted_Connection=yes'
,'exec sp_who') -- 這里是你要調用的存儲過程
 
參考文獻 :http://www.linkui.cn/read-20.html
 http://blog.joycode.com/ghj/archive/2004/04/12/19015.aspx


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 华宁县| 涞水县| 河池市| 南投县| 二手房| 三穗县| 长顺县| 利川市| 邯郸县| 顺义区| 岢岚县| 遵化市| 资溪县| 赤峰市| 广宁县| 南陵县| 抚松县| 安塞县| 石狮市| 华蓥市| 蚌埠市| 安徽省| 思茅市| 如东县| 容城县| 密云县| 镇沅| 迁西县| 新晃| 南平市| 扎鲁特旗| 京山县| 潜山县| 民丰县| 安龙县| 东乌珠穆沁旗| 乃东县| 台北市| 陈巴尔虎旗| 宝兴县| 汉川市|