Prøv eksplicit at returnere SQL%ROWCOUNT.
Ifølge MSDN vil DbCommand..ExecuteNonQuery altid returnere -1 for lagrede procedurekald:
Hvis jeg husker rigtigt fra mine dage, hvor jeg brugte masser af lagrede processer, tror jeg, at du skal bruge et output-argument for at returnere ting som antallet af opdaterede rækker.