gpt4 book ai didi

c# - 为什么MySqlParameter Add parameter as 0转换为null

转载 作者:可可西里 更新时间:2023-11-01 07:02:05 26 4
gpt4 key购买 nike

我正在添加一个参数以使用 MySQL 存储过程调用,例如

List<MySqlParameter> MyParams = new List<MySqlParameter>();    
MyParams.Add(new MySqlParameter("MyId", 0));

但出于某种原因,当我查看 MyParams 时,单步执行我的代码时 MyId 值被转换为 null。有谁知道这是为什么,因为如果我像下面这样从一个 int 变量中赋值就可以了

int id = 0;
List<MySqlParameter> MyParams = new List<MySqlParameter>();
MyParams.Add(new MySqlParameter("MyId", id));

最佳答案

好吧,您陷入了 c# 的极端情况,即文字 0 可以转换为 Enum 隐式

An implicit enumeration conversion permits the decimal-integer-literal 0 to be converted to any enum-type

Reference

因此,new MySqlParameter("MyId", 0) 被编译成 MySqlParameter(string,MySqlDbType) 而不是 MySqlParameter(string,object) 作为结果,您的值 0 被忽略。

new MySqlParameter("MyId", id) 之所以有效,是因为隐式转换为枚举仅在值为 literal 时有效,不适用于 variables .所以很明显,这会被编译到 MySqlParameter(string,object) 中,从而产生预期的结果。

new MySqlParameter("MyId", (object)0)//this solves the problem

或者这个

New MySqlParameter("MyId", MySqlDbType.Int).Value = 0

顺便说一句,正如@Suraj Singh 指出的那样,您可能必须使用 @MyId 而不是 MyId

希望对你有帮助

关于c# - 为什么MySqlParameter Add parameter as 0转换为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788033/

26 4 0