Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取ID(主键)的输出参数_C#_Mysql_Mysql Connector_Connector Net - Fatal编程技术网

C# 获取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

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

我正在尝试将值插入数据库并获取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作为值,即使我可以看到该值已插入到数据库中(因此连接设置等都很好)

我试过的 我已经读过和,但是如果我将代码更改为

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
,因为该命令将返回一行和一个值

顺便说一句,如果您有一个自动递增列,那么不要为该列传递任何内容