[C#.net]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#.net]SQL参数传入空值报错解决方案的更多相关文章
- C#中SQL参数传入空值报错解决方案
C#中的null与SQL中的NULL是不一样的,SQL中的NULL用C#表示出来就是DBNull.Value. 注意:SQL参数是不能接受C#的null值的,传入null就会报错. 下面我们看个例子: ...
- mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法
23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...
- sql注入--双查询报错注入
sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...
- SQL注入之MySQL报错注入整理
看大佬们的文章看得我虎躯一震,精神抖擞,于是心血来潮,整理一下MySQL报错注入常见的手段和方法,再举几个例子 <代码审计:企业级Web代码安全架构>一书中介绍过报错注入十大方法,依次是: ...
- 安装sql server managerment studio报错"The instance id is required but it is missing"
问题描述: 今天在安装sql server managerment studio的时候提示报错"The instance id is required but it is missing&q ...
- 给sql server2005打补丁报错:无法安装Windows Installer MSP文件
给sql server2005打补丁报错:无法安装Windows Installer MSP文件 在我们安装完SQL2005数据库后,需要安装SP4补丁时,会出错:无法安装Windows Instal ...
- idea中 参数没有描述报错 @param XX tag description is missing错误,去除黄色警告
最近在使用idea开发工具,在方法备注中参数没有描述报错就会报一些黄色警告: @param XX tag description is missing,下面展示去除黄色警告的方法 File--sett ...
- 【笔记】springCloud--Alibaba--nacos介绍----启动报错解决方案
Nacos介绍 · 欢迎来到 Nacos 的世界! · Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管 ...
- RabbitMQ>Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as OnFail is set to ignore.-报错解决方案 原来是NNND。。。
>Erlang machine stopped instantly (distribution name conflict?). The service is not restarted as ...
随机推荐
- spring boot 2 统一异常处理
spring mvc 针对controller层异常统一处理非常简单,使用 @RestControllerAdvice 或 @RestControllerAdvice 注解就可以轻@RestContr ...
- 关于导入zepto出错的问题
一.前言 webpack在配置多页面开发的时候 ,发现用 import 导入 Zepto 时,会报 Uncaught TypeError: Cannot read property 'createEl ...
- tensorflow 查看模型输入输出saved_model_cli show --dir ./xxxx --all
saved_model_cli show --dir ./xxxxxxxx --all 可以查看模型的输入输出,比如使用tensorflow export_model_inference.py 输出的 ...
- Game Engine Architecture 3
[Game Engine Architecture 3] 1.Computing performance—typically measured in millions of instructions ...
- Go 指针
变量是存储值得地方. 借助声明变量时使用的名字来区分. 指针的值是一个变量的地址.一个指针指示值所保存的位置.不是所有的值都有地址,但是所有的变量都有.使用指针,可以在无需知道变量名字的情况下,间接读 ...
- Redis部署说明
一.普通部署 将Redis-x64-3.2.100解压,修改配置文件,一般不需要修改,直接使用默认,具体要修改可自行百度. 打开命令行,定位到解压目录,执行命令: redis-server.exe r ...
- PhoenixFD插件流体模拟——UI布局【Splash | Mist】详解
液体飞溅 | 水雾 本文主要讲解Splash | Mist折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Splash+ ...
- 启动tomcat时报错:http-nio-8080-exec-10
启动Tomcat后访问 http://192.168.199.10:8080/jpress-web-newest 网页,查看日志有报错 问题原因:Java的内存溢出 故障现象为: cat /app ...
- poj3250(单调栈模板题)
题目链接:https://vjudge.net/problem/POJ-3250 题意:求序列中每个点右边第一个>=自身的点的下标. 思路:简单介绍单调栈,主要用来求向左/右第一个小于/大于自身 ...
- SSM商城开发学习
功能模块:前端:门户.商品搜索.商品展示.购物车.注册&登录 后端:商品管理.订单管理.cms 上线,bug,维护,停到上线,维护,打包,上线 某一个模块出现bug,停到这个模块 tomcat ...