C#中SQL参数传入空值报错解决方案
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。
注意:SQL参数是不能接受C#的null值的,传入null就会报错。
下面我们看个例子:
SqlCommandcmd=newSqlCommand("InsertintoStudentvalues(@StuName,@StuAge)",conn);
cmd.parameters.add("@StuName",stuName);
cmd.parameters.add("@StuAge",stuAge);
cmd.ExecuteNonQuery();
上述代码咋看冇问题,其实当stuName或stuAge的值为null时,就会抛出异常。那怎么解决呢?
解决方案:当stuName或stuAge的值为null时,传入DBNull.Value。下面在公共类里写一个静态的通用方法对传入的参数值进行判断,为null则返回DBNull.Value,否则返回原值。
publicstaticobjectSqlNull(objectobj)
{
if(obj==null)
{
returnDBNull.Value;
}
else
{
returnobj;
}
}
调用上述方法后的代码如下:
SqlCommandcmd=newSqlCommand("InsertintoStudentvalues(@StuName,@StuAge)",conn);
cmd.parameters.add("@StuName",SqlNull(stuName));
cmd.parameters.add("@StuAge",SqlNull(stuAge));
cmd.ExecuteNonQuery();
另外,如果参数值来源于控件(如文本框)的值,则传入的参数值不会为null(因为控件的值不会为null,即便没值也是""),如果想实现当控件的值为""(如文本框中没有输入字符)时,数据表字段值为NULL,只需对SqlNull方法稍作修改:
publicstaticobjectSqlNull(objectobj)
{
if(obj==null||obj.ToString()=="")
{
returnDBNull.Value;
}
else
{
returnobj;
}
}
延伸:
传SQL参数还可以传参数组,如下:
SqlParameter[]parm=newSqlParameter[]
{
newSqlParameter("@StuName",SqlNull(stuName)),
newSqlParameter("@StuAge",SqlNull(stuAge))
}
if(parm!=null)
{
cmd.Parameters.AddRange(parm);
}
cmd.ExecuteNonQuery();
注意:newSqlParameter(参数名,参数值)里的参数值同样不接受null值,且parm参数组也不接受null,if(parm!=null)的判断不能少。
以上所述是小编给大家介绍的C#中SQL参数传入空值报错解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!