2016-04-13 2 views
1

Я пытаюсь выполнить хранимую процедуру и вернуть последнюю instered идентификатор, но каждый раз, когда результат равен 0.MySqlCommand.LastInsertedId вернуться 0

Это, как я это делаю:

public long InsertActivity(cActivities objAct) 
    {   
     long lastID = 0; 

     try 
     { 
      MySqlCommand myCmd = connection.CreateCommand(); 
      connection.Open(); 

      myCmd.CommandText = "add_activity"; 
      myCmd.CommandType = CommandType.StoredProcedure; 

      myCmd.Parameters.AddWithValue("@TGUID", objAct.TGUID); 
      myCmd.Parameters.AddWithValue("@TItem", objAct.TItemID); 
      myCmd.Parameters.AddWithValue("@ActDesc", objAct.ActivityDesc); 
      myCmd.Parameters.AddWithValue("@DateStart", objAct.DateStart); 
      myCmd.Parameters.AddWithValue("@DateEnd", objAct.DateEnd); 
      myCmd.Parameters.AddWithValue("@ActNote", objAct.Note); 
      myCmd.Parameters.AddWithValue("@Category", objAct.Category); 

      if (myCmd.ExecuteNonQuery() > 0) 
      { 
       lastID = myCmd.LastInsertedId; 

       myCmd.Parameters.Clear(); 

       connection.Close(); 

      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("ERROR: " + ex.Message); 
     } 

     return lastID; 
    } 

и здесь является процедурой add_activity

CREATE DEFINER=`root`@`localhost` PROCEDURE `add_activity`(IN `TGuid` VARCHAR(50), IN `TItem` INT, IN `ActDesc` VARCHAR(100), IN `DateStart` DATE, IN `DateEnd` DATE, IN `ActNote` VARCHAR(500), IN `Category` VARCHAR(200), OUT `_lastID` BIGINT) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
INSERT INTO activities (TGUID, TItemID, Descr, DateStart, DateEnd, Note, Category) VALUES (TGuid, TItem, ActDesc, DateStart, DateEnd, ActNote, Category); 

Я думаю, что проблема в том, что я вызываю хранимую процедуру. вместо команды sql.

+2

Вы можете показать 'add_activity' SP? –

ответ

0

В хранимых процедурах вы должны явно вернуть идентификатор с помощью команды output. иногда хранимая процедура возвращает более одной строки, возможно, ваш результат имеет более одного ряда.

CREATE PROCEDURE insertAndReturn 
AS 
BEGIN 
    INSERT INTO activities (TGUID, TItemID, Descr, DateStart, DateEnd, Note, Category) OUTPUT inserted.TGUID VALUES (TGuid, TItem, ActDesc, DateStart, DateEnd, ActNote, Category); 
END 
GO 
Смежные вопросы