将数据类型 int 转换为 tinyint 时出错
Posted
技术标签:
【中文标题】将数据类型 int 转换为 tinyint 时出错【英文标题】:Error converting data type int to tinyint 【发布时间】:2021-04-03 06:29:33 【问题描述】:我是存储过程的新手。当我运行此程序时,我收到一条错误消息,提示。在我的 C# 中有以下代码:
mysqlcmd.CommandText = "EXECUTE PhoneNumber_Insert @p_PhoneNumberTypeID, @p_PersonID";
mySqlcmd.Parameters.Add("@p_PhoneNumberTypeID", SqlDbType.TinyInt).Value = 1;
mySqlcmd.Parameters.Add("@p_PersonID", SqlDbType.Int).Value = "754381";
mysqlConnection.Open();
mySqlcmd.ExecuteNonQuery();
mysqlConnection.Close();
【问题讨论】:
将1
转换为byte
(mySqlcmd.Parameters.Add("@p_PhoneNumberTypeID", SqlDbType.TinyInt).Value = (byte) 1;
)。让我知道它是否有效,我会写下来作为答案
发布您的存储过程。定义。你可能有你的参数类型错误的方式....
@Flydog57 - 我这样做了,现在我得到了这个错误。
"PhoneNumber_Insert 需要未提供的参数 @PhoneNumberTypeId" mySqlcmd.Parameters.Add("@p_PhoneNumberTypeID", SqlDbType.TinyInt).Value= (byte)1;
mySqlcmd.Parameters.Add("@p_PersonID", SqlDbType.Int).Value = "754381";
你为什么要把它作为字符串传递?
【参考方案1】:
您在 MySQL 连接器/NET 中遇到 bug 101302。有三种可能的解决方法:
-
更改您的代码以明确使用
MySqlDbType.Byte
:mySqlcmd.Parameters.Add("@p_PhoneNumberTypeID", MySqlDbType.Byte).Value = 1;
降级到 MySql.Data 8.0.21。
切换到MySqlConnector,它支持与MySql.Data相同的API,但为less buggy。
【讨论】:
@MitchWheat 这是各种数据类型都会出现的问题;查看重复的错误报告:bugs.mysql.com/bug.php?id=101424。该错误报告只是提供了BOOL
的复制步骤。以上是关于将数据类型 int 转换为 tinyint 时出错的主要内容,如果未能解决你的问题,请参考以下文章
将数据类型 varchar 转换为日期时将 int 年份转换为字符串时出错
在计算 SUM 之前过滤列(错误:将数据类型 varchar 转换为 int 时出错)