C#——SqlParameter的使用方法及注意事项
SqlParameter可以防止sql注入问题,这里记录下使用方法及代码。
1.封装的sqlHelper类中的数据库操作方法(部分代码,具体可参见.net 使用SQLconnection连接数据库及SQL帮助类)
//这里要填入你的数据库连接字符串
private static string connectionString = "*************************";/// <summary>/// 执行增、删、改的方法/// </summary>/// <param name="sql">预计执行的非SELECT查询语句</param>/// <param name="param">SQL语句中的可变参数</param>/// <returns>返回受影响的行数</returns>public static int ExecuteNonQuery(string sql, params SqlParameter[] param){using (SqlConnection conn = new SqlConnection(connectionString)){try{conn.Open();SqlCommand cmd = new SqlCommand(sql, conn);cmd.Parameters.AddRange(param);return cmd.ExecuteNonQuery();}catch (Exception ex){Console.WriteLine("异常信息:\n" + ex.Message);return -2;}}}
2.使用SqlParameter的代码:
public static void TestSqlParameter(){string sqlValue = "insert into out_in_storage(day_night_shift,record_acc," +"record_name,handle_acc,handle_name,is_outed,product_line,fixure_id,log_time) " +"values(@day_night_shift,@record_acc,@record_name,@handle_acc,@handle_name,@is_outed," +"@product_line,@fixure_id,@log_time)";SqlParameter[] parameters = {new SqlParameter("@day_night_shift","day"),new SqlParameter("@record_acc", "123"),new SqlParameter("@record_name", "张飞"),new SqlParameter("@handle_acc", "2"),new SqlParameter("@handle_name", "operator"),new SqlParameter("@is_outed", 1),new SqlParameter("@product_line", "1"),new SqlParameter("@fixure_id", "2"),new SqlParameter("@log_time", "2019/2/18")};int affectCount = SqlHelper.ExecuteNonQuery(sqlValue, parameters);Console.WriteLine("影响行数:"+affectCount);}
这里使用了控制台程序进行测试,运行代码的截图如下:
2.这里使用SQLparameter时要注意一点,在前面定义string类型字符串时,对于数据库中varchar类型的数据不需要再添加单引号!!!这是我在后面的使用中所犯的一个错误。下面给出具体的错误例子代码:
错误代码示例:
public static void TestUpdateParameter(){string str = "6;7;8";string[] strArray = str.Split(';');//下面定义的字符串是错误的,需要将@fixure_id两边的单引号删去,才是正确的写法,这样是执行string sqlValue = "update fixure_entity set entity_status_id=2 where fixure_id='@fixure_id'";SqlParameter[] parameters ={new SqlParameter("@fixure_id",strArray[0])};int count= SqlHelper.ExecuteNonQuery(sqlValue, parameters);Console.WriteLine(count);}
正确代码示例:(将单引号删去)
public static void TestUpdateParameter(){string str = "6;7;8";string[] strArray = str.Split(';');string sqlValue = "update fixure_entity set entity_status_id=2 where fixure_id=@fixure_id";SqlParameter[] parameters ={new SqlParameter("@fixure_id",strArray[0])};int count= SqlHelper.ExecuteNonQuery(sqlValue, parameters);Console.WriteLine(count);}
3.最后给出一个批量插入多条记录的代码示例(仅供参考,基于第一点的代码)
public static void TestSqlParameter(){string str = "6;7;8";string[] strArray = str.Split(';');string sqlValue = "insert into out_in_storage(day_night_shift,record_acc," +"record_name,handle_acc,handle_name,is_outed,product_line,fixure_id,log_time) " +"values(@day_night_shift,@record_acc,@record_name,@handle_acc,@handle_name,@is_outed," +"@product_line,@fixure_id,@log_time)";SqlParameter[] parameters = {new SqlParameter("@day_night_shift","day"),new SqlParameter("@record_acc", "123"),new SqlParameter("@record_name", "张飞"),new SqlParameter("@handle_acc", "2"),new SqlParameter("@handle_name", "operator"),new SqlParameter("@is_outed", 1),new SqlParameter("@product_line", "1"),new SqlParameter("@fixure_id", "1"),new SqlParameter("@log_time", "2019/2/18")};int affectCount = 0;int totalCount = 0;for (int i = 0; i < strArray.Length; i++){parameters[7] = new SqlParameter("@fixure_id", strArray[i]);affectCount = SqlHelper.ExecuteNonQuery(sqlValue, parameters);totalCount += affectCount;}Console.WriteLine("影响行数:" + totalCount);}
4.SQLparameter使用时还有一个注意点:SqlParameter如果传入0会变成NULL
错误测试代码:
SqlParameter parm = new SqlParameter("@id",0);
调试时候发现@id值变成null,无法正确调用。
正确写法:
SqlParameter parm = new SqlParameter("@id",Convert.ToInt32(0));
微软官方解释:
微软官方的参考文档:
SqlParameter 构造函数
C#——SqlParameter的使用方法及注意事项相关推荐
- Dubbo+zookeeper使用方法以及注意事项
Dubbo+zookeeper使用方法以及注意事项 最近在一个项目中想做一个数据库查询的服务,目的是将数据库查询这块从程序中脱离出来,形成一个公共的服务平台,大家都可以调用,经过考虑决定选用Dubbo ...
- 【PC工具】200412更新百度网盘下载工具——最终最简单百度网盘下载方法及注意事项...
今天有朋友在群里问会员账号,上次好像说过,这种公用的会员账号基本下载量都超了,同样也限速,所以这种账号一般都用来找资源. 百度网盘这个题材也来回来去发过好几个工具了,太麻烦不说,老这么道高一尺魔高一丈 ...
- 【PC工具】200324更新百度网盘下载工具——最新百度网盘下载工具使用方法及注意事项...
今天(200324)更新一个大牛的个人项目pdown,大家可以收藏一下备用(为啥是备用呢,细心的小伙伴应该发现我把标题中的高速两个字去掉了). 先发项目地址:没错还是那个神奇的网站(大神奇人聚集的地方 ...
- 【PC工具】更新百度网盘高速下载工具——亿寻使用方法及注意事项
之前分享的工具和方法大部分都不好用了,我也就不保留了,有需要的朋友可以翻看之前的历史文章. 今天分享一个目前比较主流的下载工具"亿寻",可能很多朋友都用过了,这里我简单说一下使用方 ...
- php获取表单$_files,PHP中$_FILES的使用方法及注意事项说明
$_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...
- 佳能g3800故障灯说明书_汽车仪表灯的使用方法以及注意事项
能够准确地识别仪表盘上的数据是每个驾驶员的必要能力,但是如今,汽车技术日新月异,大量先进技术已应用于我们的爱车上.汽车仪表盘上的指示灯和中控台上的指示灯按钮变得越来越繁杂,准确识别这些抽象按钮已不再是 ...
- 电脑安全注意事项_松下洗衣机维修方法及注意事项
阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注. 注:本文转载自网络,不代表 ...
- go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别
入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{//变量名字大 ...
- 动物之森服务器维护时间,动物之森怎么更改时间 动物森友会改时间方法及注意事项...
动物之森怎么更改时间?在动物之森中有些任务需要等待很长时间才能成功触发,为了节省时间很多玩家都会用穿越的方法投机取巧,也就是更改NS主机的时间.下面就是动物森友会改时间方法及注意事项了,大家一起来看看 ...
- linux gfs原理,Linux GFS 配置方法及注意事项
Linux GFS(Global File System)是实现为多个访问节点或者主机能同时读写的分布式文件系统. 现测试基于RedHat的GFS简单 配置方法及注意事项实验记录如下: 1.GFS ...
最新文章
- JavaMVC 模式
- 25岁社招进阿里,从电商到有赞新零售,他仅1年就打开了马云一直想做的新领域!
- python 匹配字符串多个_Python:匹配字符串中的多个子字符串
- 使用jquery调试ajax接口
- Oracle命令--alter 操作
- 分布式之redis复习精讲
- SpringBoot自动配置实现原理及源码解析(2.3.x)
- Kali扫描工具Nmap
- 记录List做分页、模糊搜索、时间排序
- 1599 元至 1999 元 ,Redmi Note 9 Pro 正式发布:骁龙 750G + 1 亿像素相机
- 大数定律和中心极限定理(未完成)
- 苏宁管培生java1面2面
- 职场人必看:提高工作效率的6大法则
- 微信公众号小程序外卖返利分销系统美团饿了么外卖cps软件源码
- 天干地支计算公式_天干地支计算方法
- 【统计学】统计学基础
- 基于NFS共享存储实现kvm虚拟主机动态迁移
- Ajax简单实现注册用户名校验
- yeah邮箱功能测试
- 【Docker】Dockerfile用法详解
热门文章
- android studio jdy08,JDY-08蓝牙4.0模块+V3.3手册+.pdf
- 计算机软件毕业论文周记,软件毕业设计周记.docx
- centos 虚拟机glibc升级_CentOS 6 glibc升级到2.15
- Linux 常用软件
- 0成本快速提升群活跃等级点亮群LV5图标
- 一维码,二维码,zxing
- Luarocks 安装遇到的坑
- SVM-支持向量机算法概述
- gis怎么提取水系_利用ArcGIS水文分析工具提取河网
- matlab解三角函数方程组,用matlab解三角函数方程组:y=A+Bx+Csin(Dx)+Esin(Fx)