C# 为什么MySqlParameter将参数添加为0转换为null
我添加了一个参数,用MySQL存储过程调用,比如C# 为什么MySqlParameter将参数添加为0转换为null,c#,mysql,null,mysql-parameter,C#,Mysql,Null,Mysql Parameter,我添加了一个参数,用MySQL存储过程调用,比如 List<MySqlParameter> MyParams = new List<MySqlParameter>(); MyParams.Add(new MySqlParameter("MyId", 0)); List MyParams=new List(); 添加(新的MySqlParameter(“MyId”,0)); 但由于某种原因,当我查看MyParams时,在遍历代码时,MyId值被转换为null。有
List<MySqlParameter> MyParams = new List<MySqlParameter>();
MyParams.Add(new MySqlParameter("MyId", 0));
List MyParams=new List();
添加(新的MySqlParameter(“MyId”,0));
但由于某种原因,当我查看MyParams时,在遍历代码时,MyId值被转换为null。有人知道为什么会这样吗?因为如果我从下面这样的int变量赋值就可以了
int id = 0;
List<MySqlParameter> MyParams = new List<MySqlParameter>();
MyParams.Add(new MySqlParameter("MyId", id));
intid=0;
List MyParams=new List();
添加(新的MySqlParameter(“MyId”,id));
在数据库架构中,MyId是int类型的主键吗?是否将allow null设置为yes
将值0分配给带有allow null的PK将导致分配null。
我怀疑是数据库设置的问题,而不是代码的问题。当使用
SqlParameter
构造函数的此重载来指定整数参数值时,请小心。由于此重载接受Object类型的值,因此当值为零时,必须将整数值转换为Object类型---
希望它也适用于MySql
MyParams.Add(New MySqlParameter("@MyId", MySqlDbType.int)).Value = 0;
或尝试
Parameters.AddWithValue("@MyId", 0);
好吧,您陷入了c的困境,即literal
0
可以隐式转换为Enum
隐式枚举转换允许将十进制整数文本0转换为任何枚举类型
因此,newmysqlparameter(“MyId”,0)
被编译成MySqlParameter(string,MySqlDbType)
,而不是MySqlParameter(string,object)
,因此您的值0
被忽略
newmysqlparameter(“MyId”,id)
这是因为只有当值为literal
时,对枚举的隐式转换才有效,而不是变量的隐式转换。因此很明显,这会被编译成MySqlParameter(string,object)
,从而得到预期的结果
new MySqlParameter("MyId", (object)0)//this solves the problem
还是这个
New MySqlParameter("MyId", MySqlDbType.Int).Value = 0
顺便说一句,正如@Suraj Singh所指出的,您可能必须使用@MyId
而不是MyId
希望这有帮助MyId是INT类型PrimaryKey的一部分。在表架构中,列被设置为NOT null,但0
不是null
^agree。为什么要将0作为主键插入?当您插入“1”时会发生什么?@AaronHopkins MyId是PrimaryKey的一部分,而不是单列PrimaryKey您的数据库和规则。不用担心。发布MySqlParameter
的代码,没有它,这个问题是无法回答的。MySqlParameter是MySql.Net API的一部分:好的,那是我的*东西。我们仍然需要查看MyParams是如何被推送到命令中的。@downvoter您能给我一个下推投票的原因吗?