c# - MySqlCommand.LastInsertedId 返回 0

标签 c# mysql stored-procedures lastinsertid

我正在尝试执行存储过程并返回最后输入的 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 命令。

最佳答案

在存储过程中,必须使用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

关于c# - MySqlCommand.LastInsertedId 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36594401/

相关文章:

c# - 在 Quartz.net 中,如何在使用单个 IJob 时防止作业同时运行?

c# - 是否存在任何不在解析时加载整个文件的 DOM 实现?

php mysql + 创建个人资料页面

php - 在php中使用sql求和字段

php - mysql中的逗号分隔值

c# - 存储过程返回到 C# .Net 中的 DataSet

c# - WPF - 尝试在任务中打开一个新窗口但收到 "The calling thread must be STA exception"

mysql - 创建存储过程 MySQL 时出错

mysql - 为什么MySQL发现CONCAT语句有错误?

c# - 在 Task 中等待后代码的执行上下文