簡體   English   中英

從C#調用時知道存儲的proc的類型

[英]Knowing the type of the stored proc when invoking from C#

我正在使Windows服務能夠在sql服務器數據庫上運行操作(插入,編輯等)並調用存儲的Procs。

但是,有沒有辦法讓我知道SP的類型? 從C#調用時,如果它返回1個值或更多或無(我可以使用executereader,scalar等),則需要knof?

謝謝

  1. 通常使用SqlCommand.ExecuteNonQuery()來調用非查詢 但是將其作為SqlCommand.ExecuteReader()運行是有效的。 唯一的區別是,對於不返回結果集的存儲過程,對DataReader.Read()的第一次調用將返回false
  2. 行集作為SqlCommand.ExecuteReader()運行。 第一次調用DataReader.Read()將返回true
  3. 標量只是具有一列和一行的行集的快捷方式。

因此,您可以在所有三種情況下使用ExecuteReader

盡管您的問題似乎沒有必要,但是您可以使用fmtonly選項檢索結果集的元數據。 該設置使語句僅返回列信息; 沒有返回數據行。 這樣就可以運行:

SET FMTONLY ON;
EXEC dbo.YourProc @par1 = 1;
SET FMTONLY OFF;

從C#中將其作為CommandText執行,您可以檢查存儲過程將返回的列名稱。

為了驗證以這種方式運行的存儲過程不會產生任何副作用,我運行了以下測試用例:

create table table1 (id int)
go
create procedure YourProc(@par1 int)
as
insert into table1 (id) values (@par1)
go
SET FMTONLY ON;
EXEC dbo.YourProc @par1 = 1;
SET FMTONLY OFF;
go
select * from table1

這沒有返回任何行。 因此,僅格式選項可確保沒有實際的更新或插入發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM