——此文章摘自《C#高級編程(第
版)》定價
元 特價
元 購買
調用返回輸出參數的存儲過程
前面兩個執行存儲過程的示例都沒有返回值如果存儲過程包含輸出參數則它們就需要在NET客戶程序中定義以便在過程返回時填充其輸出參數下面的示例說明了如何在數據庫中插入記錄把該記錄的主鍵碼返回給調用者
記錄的插入
Region表僅由一個主鍵碼(RegionID)和描述字段(RegionDescription)組成要插入一個記錄需要生成該數字主鍵碼再把新行插入到數據庫中在這個示例中通過在存儲過程中創建一個主鍵碼簡化了主鍵碼的生成使用的方法未經過任何加工這就是本章的後面用一節的篇幅介紹鍵的生成的原因下面使用這個示例就足夠了
CREATE PROCEDURE RegionInsert(@RegionDescription NCHAR()@RegionID INTEGER OUTPUT)AS
SET NOCOUNT OFF
SELECT @RegionID = MAX(RegionID)+
FROM Region
INSERT INTO Region(RegionID RegionDescription)
VALUES(@RegionID @RegionDescription)
GO
插入過程創建一個新Region記錄在數據庫本身生成主鍵碼值時這個值作為輸出參數從過程返回(@RegionID)這對於這個簡單示例來說就足夠了但對於比較復雜的表(特別是有默認值的表)通常不使用輸出參數而選擇整個插入的行把該行返回給調用者NET類可以處理這兩種情況
SqlCommand aCommand = new SqlCommand(RegionInsert conn);
aCommandCommandType = CommandTypeStoredProcedure;
aCommandParametersAdd(new SqlParameter(@RegionDescription SqlDbTypeNChar RegionDescription));
aCommandParametersAdd(new SqlParameter(@RegionID SqlDbTypeInt ParameterDirectionOutput false RegionID DataRowVersionDefault null));
aCommandUpdatedRowSource = UpdateRowSourceOutputParameters;
其中參數的定義比較復雜第二個參數@RegionID定義為包含其參數定向在這個示例中是Output除這個標志之外該示例還在最後一行使用UpdateRowSource枚舉表示通過輸出參數從這個存儲過程返回的數據當從一個DataTable(詳見本章後面的內容)中執行存儲過程調用時主要使用這個標志
調用這個存儲過程類似於前面的示例但在這個實例中需要在執行完過程後讀取輸出參數
aCommandParameters[@RegionDescription]Value = South West;
aCommandExecuteNonQuery();
int newRegionID = (int) aCommandParameters[@RegionID]Value;
在執行完命令後讀取@RegionID參數的值並把它的數據類型轉換為整型
如果調用的存儲過程返回輸出參數和一組記錄行該怎麼辦?在該實例中應定義合適的參數而不是調用ExecuteNonQuery()應調用另一個方法(例如ExecuteReader())遍歷所有的返回記錄
[] []
From:http://tw.wingwit.com/Article/program/net/201311/15501.html