O si utilizzare ExecuteScalar come Andrew suggerito - o si dovrà modificare il codice un po ':
CREATE PROCEDURE dbo.CountRowsInTable(@RowCount INT OUTPUT)
AS BEGIN
SELECT
@RowCount = COUNT(*)
FROM
SomeTable
END
e quindi utilizzare questa chiamata ADO.NET per recuperare il valore:
using(SqlCommand cmdGetCount = new SqlCommand("dbo.CountRowsInTable", sqlConnection))
{
cmdGetCount.CommandType = CommandType.StoredProcedure;
cmdGetCount.Parameters.Add("@RowCount", SqlDbType.Int).Direction = ParameterDirection.Output;
sqlConnection.Open();
cmdGetCount.ExecuteNonQuery();
int rowCount = Convert.ToInt32(cmdGetCount.Parameters["@RowCount"].Value);
sqlConnection.Close();
}
Marc
PS: ma in questo esempio concreto, suppongo che l'alternativa con l'esecuzione appena ExecuteScalar
sia più semplice e più facile da capire. Questo metodo potrebbe funzionare correttamente, se è necessario restituire più di un singolo valore (ad esempio conteggi di più tabelle o simili).
fonte
2009-06-25 13:33:12
Grazie a @Marc, ho testato la tua soluzione! Freddo! – George2