【问题标题】:MySqlCommand.LastInsertedId return 0MySqlCommand.LastInsertedId 返回 0
【发布时间】:2016-08-04 07:30:53
【问题描述】:

我正在尝试执行存储过程并返回最后插入的 id,但每次结果都是 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 命令。

【问题讨论】:

  • 你能显示add_activity SP吗?

标签: c# mysql stored-procedures lastinsertid


【解决方案1】:

在存储过程中,必须用output 命令明确返回id。有时存储过程返回多行,可能您的结果有多行。

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

【讨论】:

    猜你喜欢
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2016-10-28
    • 2019-02-20
    • 2015-06-17
    • 2012-01-04
    • 2018-02-23
    相关资源
    最近更新 更多