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