对于数据库操作可能会遇到的问题(空值问题以及出现的参数不能被重复使用问题)

初学就碰到如此多的问题,希望有遇到相同问题的少年,可以参考思路解决方案(希望共同进步)

鉴于昨日遇到操作数据库问题比较多,上网百度,才知道原来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值,空值传进数据库中

 

posted @ 2016-04-14 16:12  PlutoZ300  阅读(817)  评论(0编辑  收藏  举报