C# 获取ID(主键)的输出参数
我有一个简单的数据库,它有一个ID列作为主键,INT,AUTO_INCREMENT和一个name列 我正在尝试将值插入数据库并获取ID。这是我代码的一部分:C# 获取ID(主键)的输出参数,c#,mysql,mysql-connector,connector-net,C#,Mysql,Mysql Connector,Connector Net,我有一个简单的数据库,它有一个ID列作为主键,INT,AUTO_INCREMENT和一个name列 我正在尝试将值插入数据库并获取ID。这是我代码的一部分: using (var connection = new MySqlConnection(...)) { connection.Open(); var command = connection.CreateCommand(); command.CommandText = "INSERT INTO `a
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作为值,即使我可以看到该值已插入到数据库中(因此连接设置等都很好)
我试过的
我已经读过和,但是如果我将代码更改为
var reader = command.ExecuteReader();
reader.Read();
reader.Close();
我已经阅读了相关的文章,但它对我没有帮助,因为我已经使用了正确的MySql数据类型。只需使用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
,因为该命令将返回一行和一个值
顺便说一句,如果您有一个自动递增列,那么不要为该列传递任何内容