2016-05-14 6 views
2

現時点では、レコード数のカウントを返すストアドプロシージャを実行したいと考えています。レコードはCountingのためのSQL Serverストアドプロシージャ数として0を返します

ALTER PROCEDURE [dbo].[USP_NEWFOLDER_COUNT] 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT @@ROWCOUNT 
    FROM FileLocation 
END 

呼び出し元のC#コードは、私のクエリの結果が0である

public String CountNewFolder() 
{ 
    tempInt = 0; 

    using (SqlConnection sqlCon = new SqlConnection(connString)) 
    { 
     SqlCommand sqlComm = new SqlCommand("USP_NEWFOLDER_COUNT", sqlCon); 
     sqlComm.CommandType = CommandType.StoredProcedure; 

     sqlCon.Open(); 
     tempInt = Convert.ToInt16(sqlComm.ExecuteScalar()); 
     sqlCon.Close(); 
    } 

    return tempInt.ToString(); 
} 

あるようにストアドプロシージャが見えます。この

Records results

のように見えます。

助けや助手が役に立ちます。しかし、可能であれば、私は簡単な説明をして、私が同じミスをもう一度しないようにすることができます。あなたは、テーブル内の行数を返すないある@@ROWCOUNTを使用している

+1

はどうなりますか? – Sybren

+0

@crowcoderは正しい答えを持っていて、次のポスターの前に4秒前に投稿しました –

答えて

2

この種の操作には、OUTPUTパラメータを使用するのが理想的です。クエリSQL Server Management Studioを実行する場合、何かのような....

ALTER PROCEDURE [dbo].[USP_NEWFOLDER_COUNT] 
@Count INT OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT @Count = COUNT(*) 
    FROM FileLocation; 
END 

あなたのC#のコードが何かのように見えるでしょう...

public String CountNewFolder() 
{ 
    tempInt = 0; 

    using (SqlConnection sqlCon = new SqlConnection(connString)) 
    { 
     using(SqlCommand sqlComm = new SqlCommand("USP_NEWFOLDER_COUNT", sqlCon)) 
     { 
     sqlComm.CommandType = CommandType.StoredProcedure; 

     sqlComm.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output; 

     sqlCon.Open(); 
     sqlComm.ExecuteNonQuery(); 

     tempInt = Convert.ToInt32(sqlComm.Parameters["@Count"].Value); 
     } 
    } 

    return tempInt.ToString(); 
} 
4

....

使用この代わりに:

ALTER PROCEDURE [dbo].[USP_NEWFOLDER_COUNT] 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT COUNT(*) 
    FROM FileLocation 
END 

@@ROWCOUNTは、各後満たされます変数です最後に実行されたSQL文の影響を受けた行数を示すSQL文。あなたがSELECT * FROM FileLocationを実行する場合は、このコマンドが実行された後ので、その後、その後、@@ROWCOUNTはそのSELECT声明 によって返される行の数が含まれます(それが最初の場所でSELECT COUNT(*) FROM FileLocationを行うよりも効率の低いだろう)。

4

あなたは@@ROWCOUNTが間違っています。これは、最後のクエリが実行した行の数を返します。行数がゼロになるようにクエリがありません。必要なもの:

SELECT COUNT(*) FROM [FileLocation]; 
+0

"マニュアルを読まないで、マニュアルを読んで気にせず、自分の期待を示している"という古典的なケースです。 – TomTom

関連する問題