The most probable reason reason you get @@ROWCOUNT = 0, is running command in a separate implicitely defined db transaction (check the @@SPID value to make sure).
The solution is using a single explicitly defined transaction within your c# code.
Notice, that "SET NOCOUNT ON" option within the stored procedure causes no effects to @@ROWCOUNT value:
The @@ROWCOUNT function is updated even when SET NOCOUNT is ON.
PS. "MultipleActiveResultSets=True" option for SqlConnection connection string helped