C# C MySqlConnector 6.4.4最后插入的ID()为INT64?

C# C MySqlConnector 6.4.4最后插入的ID()为INT64?,c#,asp.net,mysql,mysql-connector,C#,Asp.net,Mysql,Mysql Connector,MySqlCommand.ExecuteScalar和MySqlDataReader.GetValueint索引都返回和对象类型。我假设,因为我显式地将最后一个插入ID转换为有符号整数,所以我可以使用类似intcmd.ExecuteScalar或intrdr.GetValue0的内容取消对该对象的装箱 但是,我不断收到一个错误,指出强制转换无效。调试时,我注意到返回的对象的类型是INT64。因此,我可以通过使用longcmd.ExecuteScalar强制转换值来取消对象的装箱 我只是想理解为什

MySqlCommand.ExecuteScalar和MySqlDataReader.GetValueint索引都返回和对象类型。我假设,因为我显式地将最后一个插入ID转换为有符号整数,所以我可以使用类似intcmd.ExecuteScalar或intrdr.GetValue0的内容取消对该对象的装箱

但是,我不断收到一个错误,指出强制转换无效。调试时,我注意到返回的对象的类型是INT64。因此,我可以通过使用longcmd.ExecuteScalar强制转换值来取消对象的装箱

我只是想理解为什么它会以INT64而不是INT32的形式出现

顺便说一下,我的自动增量列的数据类型是有符号整数

下面是一个测试用例:

SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER);

进行了一些后续测试,发现问题与上次插入ID无关。选择1作为ID并选择CONVERT1,带符号整数作为ID也会通过连接器返回64位整数。我将尝试通过在

中加载MySql.Data来了解是否有什么问题,可能是因为当返回的值不是太大时,Convert.ToInt32可以进行转换,即该值将适合32位整数。不过,强制转换告诉编译器,您认为val是32位的值,而事实并非如此。

在发布了一个连接器/Net错误并获得反馈后,我被引导到文档中。转换和强制转换都会在强制转换为整数类型时生成64位数字。不知道他们为什么不做像CAST1作为SMALLINT,CAST1作为INT,CAST1作为BIGINT这样的事情,但是他们没有。因为它是从MySQL服务器返回的长64位,连接器不知道它应该是32位int


我仍在试图弄清楚为什么LAST_INSERT_ID从服务器返回LONGLONG。

生成此ID的基础密钥字段的大小是多少?如果实际关键字字段为64位,则上次插入\u id无法返回32位int,而不会截断/损坏该关键字。数据类型为有符号整数而不是Null。我的数据库类型为有符号int,应为Int32。我在SQL中显式转换为带符号的INT。我知道ExecuteScalar给了我一个BIGINT Int64。我想弄明白的是,为什么MySqlConnector继续将val作为64位值而不是32位值提供给我。是的,我明白你的意思-这很奇怪。如果在返回之前没有显式地强制转换,会发生什么?
using (MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["skimmel"].ConnectionString))
{
    using (MySqlCommand cmd = new MySqlCommand(@"INSERT INTO test (Name) VALUES (@Name); SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER);", con))
    {
        var p = new MySqlParameter("@Name", MySqlDbType.String);
        p.Value = "Test" + DateTime.Now.Ticks.ToString();
        cmd.Parameters.Add(p);

        con.Open();

        object val = cmd.ExecuteScalar();
        Type t = val.GetType();
        long l = (long)val;
        int i1 = Convert.ToInt32(val);
        int i2 = (int)val;  // <-- Error here!
    }
}