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