【发布时间】: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