我正在添加一个要与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


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将参数添加为0转换为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18788033/

10-10 05:06