2

行数を返すストアド プロシージャに遭遇しましたが、ここで行数を読み取る方法がわかりません。

ストアド プロシージャは次のとおりです。

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())
{

次に何をすべきかわからない

4

4 に答える 4

4

プロシージャから単一の値を返すときに SqlDataReader を使用するポイントはどこですか?

SqlCommand cmd1 = new SqlCommand("Document_Exists", conn); 
cmd1.CommandType = CommandType.StoredProcedure; 
cmd1.Parameters.Add(new SqlParameter("@Url", url)); 
int rows = Convert.ToInt32(cmd.ExecuteScalar()); 
于 2012-07-27T14:38:16.473 に答える
2

試す

int rows = 0;
if(rdr1.Read()) {
    rows = (int) rdr1["Rows"];
}
于 2012-07-27T14:31:06.957 に答える
1
int totalRows=0;
if(rdr1.Read())
{
    totalRows=  rdr1.GetInt32(rdr1.GetOrdinal("Rows"));
}

単一の値のみを再調整する場合は、を使用することをお勧めしますExecuteScalar

于 2012-07-27T14:35:29.580 に答える
1
int rowCount = dataReader.Cast<object>().Count();
于 2013-12-19T10:14:38.767 に答える