gpt4 book ai didi

c# - 获取 ID 的输出参数(主键)

转载 作者:行者123 更新时间:2023-11-29 00:08:55 25 4
gpt4 key购买 nike

我有一个简单的数据库,它有一个 ID 列作为主键、INT、AUTO_INCREMENT 和一个名称列。

我正在尝试将值插入数据库并取回 ID。这是我的代码的一部分:

using (var connection = new MySqlConnection(...))
{
connection.Open();
var command = connection.CreateCommand();

command.CommandText =
"INSERT INTO `adressbook`.`Person` (`ID`, `Name`)
VALUES (@id, @name);";
var idParameter = new MySqlParameter("id", MySqlDbType.Int32);
idParameter.Direction = ParameterDirection.Output;
idParameter.SourceColumn = "ID";
command.Parameters.Add(idParameter);
command.Parameters.AddWithValue("name", "Test");

command.ExecuteNonQuery();
var id = command.Parameters["id"].Value;

connection.Close();
}

但是,我总是得到 NULL 作为值,即使我可以看到该值已被插入到数据库中(因此连接设置等都很好)。

我尝试过的

我已阅读 MySQL Connector/NET Output Parameter Returning NULLGet the value from Output parameter C# , 但如果我将代码更改为

它仍然不起作用
var reader = command.ExecuteReader();
reader.Read();
reader.Close();

我已阅读相关帖子 Executing MySqlCommand (StoredProcedure) with output parameter ,但这对我没有帮助,因为我已经在使用正确的 MySql 数据类型。

最佳答案

只需使用 LAST_INSERT_ID MySql的功能。

using (var connection = new MySqlConnection(...))
{
connection.Open();
var command = connection.CreateCommand();

command.CommandText = @"INSERT INTO `adressbook`.`Person` (`Name`) VALUES (@name);
SELECT LAST_INSERT_ID();";
command.Parameters.AddWithValue("@name", "Test");
int result = Convert.ToInt32(command.ExecuteScalar());
.......
}

如您所见,您可以通过单次执行将多个命令发送到 MySql。LAST_INSERT_ID 函数返回最后一个自动增量值。

但是,在这种情况下,您需要调用 ExecuteScalar 而不是 ExecuteNonQuery,因为该命令将返回具有单个值的单行。

顺便说一下,如果您有一个 Auto_increment 列,那么不要为该列传递任何内容。

关于c# - 获取 ID 的输出参数(主键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26185114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com