为什么MySqlParameter将参数添加为0转换为null

nei*_*ldt 5 c# mysql null mysql-parameter

我正在添加一个要用MySQL存储过程调用的参数

List<MySqlParameter> MyParams = new List<MySqlParameter>();    
MyParams.Add(new MySqlParameter("MyId", 0));
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,当我查看MyParams时,MyId值在单步执行代码时会被转换为null.有没有人知道为什么这是因为如果我从一个int变量中分配值如下所示它是好的

int id = 0;
List<MySqlParameter> MyParams = new List<MySqlParameter>(); 
MyParams.Add(new MySqlParameter("MyId", id));
Run Code Online (Sandbox Code Playgroud)

Sri*_*vel 7

好吧,你陷入了c#的角落,文字0可以隐式转换Enum

隐式枚举转换允许将decimal-integer-literal 0转换为任何枚举类型

参考

因此,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
Run Code Online (Sandbox Code Playgroud)

或这个

New MySqlParameter("MyId", MySqlDbType.Int).Value = 0
Run Code Online (Sandbox Code Playgroud)

BTW @Suraj Singh指出你可能不得不使用@MyId而不是MyId.

希望这可以帮助