2012-07-27 32 views
2

我碰到了正在返回的行數,但我不知道我怎麼能讀到這裏的行數的存儲過程,如何讀取行計數使用SqlDataReader的

存儲過程:

CREATE PROCEDURE [dbo].[Document_Exists] 
(
    @Url varchar(255) 
) 
AS 
    SET NOCOUNT ON; 

    SELECT COUNT(*) AS Rows 
    FROM Document_Instances 
    WHERE Url = @Url 

作爲執行

EXEC @return_value = [dbo].[Document_Exists] 
    @SourceSiteUrl = N'https://cc23.dev.com/portal' 

SELECT 'Return Value' = @return_value 

試圖用這個代碼

SqlCommand cmd1 = new SqlCommand("Document_Exists", conn); 
cmd1.CommandType = CommandType.StoredProcedure; 
cmd1.Parameters.Add(new SqlParameter("@Url", url)); 
SqlDataReader rdr1 = cmd.ExecuteReader(); 

while (rdr1.Read()) 
{ 
讀它

不知道下一步該怎麼做

+0

爲什麼要使用一個讀者對於這個有什麼特別的原因嗎?它可以通過sql命令和一個輸出參數來完成。 – 2012-07-27 14:37:45

回答

2

嘗試

int rows = 0; 
if(rdr1.Read()) { 
    rows = (int) rdr1["Rows"]; 
} 
1
int totalRows=0; 
if(rdr1.Read()) 
{ 
    totalRows= rdr1.GetInt32(rdr1.GetOrdinal("Rows")); 
} 

如果要重新調整隻有一個值,我建議你使用ExecuteScalar

4

如果是使用SqlDataReader的時候點你從你的proc返回一個單一的值?

SqlCommand cmd1 = new SqlCommand("Document_Exists", conn); 
cmd1.CommandType = CommandType.StoredProcedure; 
cmd1.Parameters.Add(new SqlParameter("@Url", url)); 
int rows = Convert.ToInt32(cmd.ExecuteScalar()); 
1
int rowCount = dataReader.Cast<object>().Count();