【问题标题】:c# calling mysql sp procedure incorrect integer valuesc#调用mysql sp过程不正确的整数值
【发布时间】:2014-04-02 17:10:47
【问题描述】:

我有一个调用 mysql 存储过程的 C# 应用程序。自 2 年以来一直运行没有问题。现在,我使用最新的 mysql db 以及 .net 连接器进行了新安装,但一个接一个地出现错误。

发生第一个错误: 我收到错误消息“InvalidCast”。数据已全部正确插入。我发现,我必须在连接字符串中添加“check parameters=falls”。确实这解决了问题,我得到了真正的错误:预期参数 42,接收参数 43。有趣的是,此时数据库中不再插入数据。 所以,这确实是一个错误,我更新了 table 和 sp,使其有 43 个参数

发生第二个错误: 现在我收到一个错误,告诉我无法转换整数。在我的数据库中,我有一些带有 TinyInt 的字段。在 c# 中,它是 int。这些字段的值为 1,2 或 3。不过,我无法再将它们插入到数据库中。在它运行了数千次之前。 所以我将 db 字段转换为 INT。这解决了问题。但是发生了另一个错误

出现第三个错误:“整数值不正确:第 220 行的列“p_myparam”为“none”。 为什么现在发生这个错误是一个谜。这个值自然不是none,而是142。我现在不知道在哪里搜索以及如何解决问题。

我必须注意,在我的旧电脑上,我拥有完全相同的数据库、相同的数据和相同的 c# 应用程序。它仍在运行,没有问题。我真的很想知道怎么突然无法插入 TinyInt 字段,更糟糕的是我得到了错误 3。

如果有人有想法,我很感激任何帮助

谢谢

【问题讨论】:

  • 首先要记住的是tinyint 只是一个 8 位整数。常规的int 是 32 位的,因此在精度上损失非常大,所以我完全理解这个错误。至于第三个错误,我不确定是什么问题。
  • 感谢您的反馈。这意味着,在使用 c# 时,不应在 MySQL 中使用 TinyInt 和 SmallInt?
  • 不一定。 C#有int16,对应smallint。对于tinyint,C# 中的最佳选择是byte
  • 我对此进行了更多调查。发生错误 3 是因为在 SP 调用中不再检查参数。在连接字符串中包含“checkparaemters=false”自然是个坏主意。我真的很想知道为什么这在 mysql 中被列为解决方法。
  • 问题与tinyint等无关。请看下面我的回答

标签: c# mysql stored-procedures


【解决方案1】:

原因找到了。在我的代码中,我有这样的声明:

long returnID= (long) myCommand.ExecuteScalar();

使用以前版本的 MySQL 服务器和 .net 连接器,这可以正常工作。没有更多的最新升级。现在应该如下:

object returnID = myCommand.ExecuteScalar();

为什么需要这种改变,不知道。

最烦人的是 ExecuteScalar 给出的完全无用的错误消息。仅仅告诉转换在具有 40 多个参数的 SP 中不起作用是没有帮助的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多