- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER);
MySqlCommand.ExecuteScalar() 和 MySqlDataReader.GetValue(int index) 都返回 object
类型。我假设因为我明确地将 LAST_INSERT_ID 转换为 SIGNED INTEGER,所以我可以使用 (int)cmd.ExecuteScalar()
或 (int)rdr.GetValue( 0)
。
但是,我不断收到一条错误消息,指出转换无效。在调试时我注意到返回的对象类型是 INT64。因此,我可以通过使用 (long)cmd.ExecuteScalar()
转换值来拆箱对象。
我只是想了解为什么它以 INT64 而不是 INT32 的形式返回?
顺便说一句,自动增量列的数据类型是 SIGNED INTEGER。
这是一个测试用例:
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!
}
}
做了一些跟进测试,发现问题并非孤立于 LAST_INSERT_ID。 SELECT 1 AS ID
和 SELECT CONVERT(1, SIGNED INTEGER) As ID
也通过连接器返回 64 位 int。将尝试通过在 ILSpy 中加载 MySql.Data 来查看是否可以解决任何问题
最佳答案
在发布连接器/网络错误并获得反馈后,我被定向到文档。转换为整数类型时,CONVERT 和 CAST 都会产生 64 位数字。不知道为什么他们不只是做像 CAST(1 As SMALLINT)、CAST(1 AS INT)、CAST(1 AS BIGINT) 这样的事情,但他们不这样做。由于它作为 LONGLONG(64 位)从 MySQL 服务器返回,连接器不知道它应该是 32 位 int。
我仍在尝试弄清楚为什么 LAST_INSERT_ID() 从服务器返回 LONGLONG。
关于C# MySqlConnector 6.4.4 LAST_INSERT_ID() 作为 INT64?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934338/
我使用 Visual Studio 2012。我有控制台应用程序。我应该连接到mysql服务器,我使用mysql连接器/C++,但是当我从表中读取时,例如,如果我应该得到“word”,我会得到四个未知
这是我的问题,我正在尝试将 Java 程序连接到 MySQL 数据库。我这里没有使用IDE。发生的情况是,当我将 mysql-connector-java-bin.jar 添加为 CLASSPATH
我在 C# 中有一个 foreach 循环,它执行 MySql 命令来检查结果是否存在,问题是我不知道如何更新与 @id_line 对应的参数中的值,错误是在第二次迭代时抛出 foreach (Str
前言:我对 C# 的 MySqlConnector 和一般的 MySql 还很陌生。 我想实现的目标是执行一个查询,然后通过FOUND_ROWS获取SqlDataReader中返回的记录数。 这是我正
我正在使用 MySQLConnector 和 C# 连接到我的数据库。一切运行正常,但是当我在另一台机器上尝试我的程序时,我收到“无法加载文件或程序集'MySql.Data”错误。我刚刚将 .exe
我正在尝试将时间从 UTC 格式的 Unix 时间戳插入到 MySQL 表中。使用from_unixtime(timestamp)可以进行解析,但它使用的时区是“当前时区”,这显然是连接的当前时区,而
我正在开发一个连接到 MySQL 数据库的 C#.NET 应用程序,并使用一些不安全的代码来使用旧的 C++ dll。 程序一启动,就会加载dll并分配一个指针,然后初始化一些C#变量,然后删除指针。
需要帮助解决一些愚蠢的密码问题。以下问题: 不能用一些密码连接到mysql服务器^^ 如果我使用具有相同“连接字符串”详细信息的密码,例如: 以下密码完全在MySql Server中(引号、双引号、分
我从 MySqlCommand.ExecuteNonQuery() 得到这个异常: Index and length must refer to a location within the strin
我正在使用: MySqlCommand comHash = new MySqlCommand("MY_FUNCTION", con); comHash.CommandType = CommandTyp
我需要别人的帮助。 我遵循教程 Streaming Data from MySQL into Kafka with Kafka Connect and Debezium但我无法使用 Debezium
我有以下代码: 导入 MySql.Data.MySqlClient导入 MySql.Data.Types 公开课FormMain 私有(private)子表单Main_Load ... ' Ope
我正在编写单元测试(技术上是集成测试,因为我正在连接到数据库)并且我想在测试中的事务中创建记录,并在测试完成后回滚所有数据库修改。我的想法是,我将通过一个 API 调用创建另一个 API 调用期望在数
我在 MySql 中有一个存储过程,它插入 10.000 个寄存器。当我从 MySql 命令行执行它时,查询需要 1 秒,但是当我从我编写的 .NET C# 应用程序执行它时,它需要大约 8 秒。 你
SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER); MySqlCommand.ExecuteScalar() 和 MySqlDataReader.Get
我正在使用 Unity 2018 开发 WebGL 应用。 我需要访问托管在同一台服务器上的 MySQL 数据库。 我的问题是:我可以使用 C# 和 MySqlConnector(我更喜欢的解决方案)
我正在尝试使用 C# 中的 MySqlCommand 对象(使用 MySQL 连接器库)在一个查询中将多条记录插入到一个表中。 我知道如何做到这一点的唯一方法是自己动态构建查询并设置 comman
我有这个问题:我正在编写一些 Python 脚本,而直到现在,在整个脚本中使用单个 MySQLConnector 连接(仅在脚本末尾关闭它)我完全没有问题,最近我遇到了一些问题。 如果我在脚本开头创建
我有这个问题:我正在编写一些 Python 脚本,而直到现在,在整个脚本中使用单个 MySQLConnector 连接(仅在脚本末尾关闭它)我完全没有问题,最近我遇到了一些问题。 如果我在脚本开头创建
我正在使用 pandas 和 sqlalchemy,并且希望将 DataFrame 加载到 MySQL 数据库中。我目前正在使用此代码片段: db_connection = sqlalchemy.cr
我是一名优秀的程序员,十分优秀!