Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

c#: ExecuteNonQuery() returns -1

Ive used this method before to return the amount of rows changed. I am it to run an insert method, the insert runs fine in the stored procedure, but the return value from the ExecuteNonQuery always returns -1.

Here is my C# code:

int ret = 0;

using (SqlConnection conn = new SqlConnection(this.ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand(QueryName, conn))
    {
        conn.Open();

        if (Params != null)
            cmd.Parameters.AddRange(Params);

        cmd.CommandType = CommandType.StoredProcedure;

        ret = cmd.ExecuteNonQuery();

        conn.Close();
    }
}

return ret;

Why do I get -1 instead of the actual number of rows changed?

like image 744
Funky Avatar asked Nov 14 '11 16:11

Funky


2 Answers

If you use this method to call a store procedure that perform UPDATE/INSERT in a table the method return -1 if the stored procudere has the SET NOCOUNT at ON value.

--source

like image 189
kol Avatar answered Oct 21 '22 23:10

kol


From Microsoft:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers. For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

You are probably getting -1 because you are using a stored procedure and not a direct table change

like image 8
Michael Gattuso Avatar answered Oct 22 '22 01:10

Michael Gattuso