It may be related to your stored procedure, which we can't see because you haven't given us the code.
But, it is worth noting that
MSDN[
^] on ExecuteNonQuery says:
Although the ExecuteNonQuery does not return any rows, any output parameters or return values mapped to parameters are populated with data.
For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.
It may be worth your reading up on returning values from stored procedures. There is a good explanation
here.[
^]