0

I'm trying something like:

            using (var db = new Database(ConnectionString, DataProvider))
            {
                var spResult =
                    db.Execute("exec [cmtUpdateOrganization] @Id,@FullName",
                               new
                                   {
                                       organizatonData.Id,
                                       organizatonData.FullName
                                   }
                        );
                if (spResult == 0 || spResult == 1)
                    return true;
                return false;
            }

But it appears the spResult is always -1.

Although in the stored procedure, it definately returns 0. I validated with the same parameters on sql server itself.

Output parameters work fine, but that is not what i prefer to do as it involves changing a lot of stored procedures.

Ophidian
  • 584
  • 8
  • 16
  • I missed the "petapoco" part in your question. So I deleted my answer to make sure nobody gets the wrong idea. Hope someone sees your question. – Guganeshan.T Jan 20 '12 at 12:31

2 Answers2

3

The Execute method in PetaPoco just calls the ExecuteNonQuery() method form the SqlCommand object.

Here is there reason why you are returning -1, which comes directly from MSDN.

Quoted from MSDN

You can use the ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database without using a DataSet by executing UPDATE, INSERT, or DELETE statements.

Although the ExecuteNonQuery returns no 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. 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.

Community
  • 1
  • 1
Schotime
  • 15,707
  • 10
  • 46
  • 75
1

I don't know what your proc look likes. However, if it's does an insert (correctly), it should return 1. Else, it will return -1;

Here's my code on testing this:

SQL PROC and TABLE

CREATE TABLE test(id INT, name VARCHAR(50), InsertDate DATETIME)

CREATE proc cmtUpdateOrganization (@id int, @FullName varchar(50))
AS
BEGIN
    IF NOT EXISTS(Select id from Test where Id = @id)
    BEGIN
        INSERT test(id,Name, InsertDate)values(@id, @FullName, GETDATE());
    END
END
GO

Here's my code. First time, you should get 1. second time for the same data, -1.

CODE

    try {
        string sql = "exec cmtUpdateOrganization @Id, @FullName";
        using (var db = new DB()) {
            db.EnableAutoSelect = false;
            var result = db.Execute(sql, new { Id = 1, FullName = "Name" });
            Console.WriteLine(string.Format("Your result is {0}", result));
        }

    } catch ( Exception ex) {
        Console.WriteLine(ex.Message.ToString());
    }
anAgent
  • 2,550
  • 24
  • 34