对于数据库操作可能会遇到的问题(空值问题以及出现的参数不能被重复使用问题)
初学就碰到如此多的问题,希望有遇到相同问题的少年,可以参考思路解决方案(希望共同进步)
鉴于昨日遇到操作数据库问题比较多,上网百度,才知道原来GC没有及时清除,还会残留在内存中,造成对象指代不明,所以出现错误
解决办法
在SqlHelper中
1 public static int ExecuteNonQuery(string sql, CommandType cmdType, params SqlParameter[] spm) 2 { 3 using (SqlConnection conn = new SqlConnection(connStr)) 4 { 5 using (SqlCommand cmd = new SqlCommand(sql,conn)) 6 { 7 cmd.CommandType = cmdType; 8 cmd.Parameters.Clear();//增加该语句清除参数干扰 9 cmd.Parameters.AddRange(spm); 10 conn.Open(); 11 return cmd.ExecuteNonQuery(); 12 } 13 } 14 }
对于数据库中字段定义为允许为空时,如果直接传递参数到执行对象中可能会出现如下错误
Additional information: The parameterized query '(@name nvarchar(50),@phone varchar(50),@email varchar(50),@group' expects the parameter '@email', which was not supplied.
出现上述的问题是因为你传递的email字段为空值,而数据库中时不支持将某个字段赋值为空的,即 email=Null;
所以解决办法
就需要你传递参数时加入
SqlParameter spm=new SqlParameter("@email",SqlDbType.VarChar,50){Value=model.Email==null?DBNull.Value:(object)model.Email}
进行空值判断,当传入的是空值时,就将DBNull.value值,空值传进数据库中