好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#中SQL参数传入空值报错解决方案

C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value。

注意:SQL参数是不能接受C#的null值的,传入null就会报错。

下面我们看个例子:

?

SqlCommand cmd= new SqlCommand( "Insert into Student values(@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,否则返回原值。

?

public static object SqlNull( object obj)

  {

   if (obj == null )

   {

    return DBNull.Value;

   }

   else

   {

    return obj;

   } 

  }

调用上述方法后的代码如下:

?

SqlCommand cmd= new SqlCommand( "Insert into Student values(@StuName,@StuAge)" ,conn);

cmd.parameters.add( "@StuName" ,SqlNull(stuName));

cmd.parameters.add( "@StuAge" ,SqlNull(stuAge));

cmd.ExecuteNonQuery();

另外,如果参数值来源于控件(如文本框)的值,则传入的参数值不会为null(因为控件的值不会为null,即便没值也是""),如果想实现当控件的值为""(如文本框中没有输入字符)时,数据表字段值为NULL,只需对SqlNull方法稍作修改:

?

public static object SqlNull( object obj)

{

   if (obj == null || obj.ToString() == "" )

   {

    return DBNull.Value;

   }

   else

   {

    return obj;

  } 

}

延伸:

传SQL参数还可以传参数组,如下:

?

SqlParameter[] parm = new SqlParameter[]

{

  new SqlParameter( "@StuName" , SqlNull(stuName)),

  new SqlParameter( "@StuAge" , SqlNull(stuAge))

}

if (parm != null )

{

  cmd.Parameters.AddRange(parm); 

}

cmd.ExecuteNonQuery();

注意:new SqlParameter(参数名, 参数值)里的参数值同样不接受null值,且parm参数组也不接受null, if(parm != null) 的判断不能少。

以上所述是小编给大家介绍的C#中SQL参数传入空值报错解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://HdhCmsTestcnblogs测试数据/Scl891004X/archive/2017/06/08/6962113.html

dy("nrwz");

查看更多关于C#中SQL参数传入空值报错解决方案的详细内容...

  阅读:46次