详解C#中SqlParameter的作用与用法
作者:-且听风吟- 发布时间:2022-11-01 09:51:17
标签:sqlparameter
一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误,并且他人可以轻易地通过拼接Sql语句来进行注入攻击。
string sql
= "update
Table1 set name = 'Pudding' where ID = '1'";//未采用SqlParameter
SqlConnection
conn = new SqlConnection();
conn.ConnectionString
= "Data
Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";//连接字符串与数据库有关
SqlCommand
cmd = new SqlCommand(sql,
conn);
try
{
conn.Open();
return(cmd.ExecuteNonQuery());
}
catch (Exception)
{
return -1;
throw;
}
finally
{
conn.Close();
}
上述代码未采用SqlParameter,除了存在安全性问题,该方法还无法解决二进制流的更新,如图片文件。通过使用SqlParameter可以解决上述问题,常见的使用方法有两种,Add方法和AddRange方法。
一、Add方法
SqlParameter
sp = new SqlParameter("@name","Pudding");
cmd.Parameters.Add(sp);
sp
= new SqlParameter("@ID","1");
cmd.Parameters.Add(sp);
该方法每次只能添加一个SqlParameter。上述代码的功能是将ID值等于1的字段name更新为Pudding(人名)。
二、AddRange方法
SqlParameter[]
paras = new SqlParameter[]
{ new SqlParameter("@name","Pudding"),new SqlParameter("@ID","1")
};
cmd.Parameters.AddRange(paras);
显然,Add方法在添加多个SqlParameter时不方便,此时,可以采用AddRange方法。
下面是通过SqlParameter向数据库存储及读取图片的代码。
public int SavePhoto(string photourl)
{
FileStream
fs = new FileStream(photourl,
FileMode.Open, FileAccess.Read);//创建FileStream对象,用于向BinaryReader写入字节数据流
BinaryReader
br = new BinaryReader(fs);//创建BinaryReader对象,用于写入下面的byte数组
byte[]
photo = br.ReadBytes((int)fs.Length);//新建byte数组,写入br中的数据
br.Close();//记得要关闭br
fs.Close();//还有fs
string sql
= "update
Table1 set photo = @photo where ID = '0'";
SqlConnection
conn = new SqlConnection();
conn.ConnectionString
= "Data
Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
SqlCommand
cmd = new SqlCommand(sql,
conn);
SqlParameter
sp = new SqlParameter("@photo",
photo);
cmd.Parameters.Add(sp);
try
{
conn.Open();
return (cmd.ExecuteNonQuery());
}
catch (Exception)
{
return -1;
throw;
}
finally
{
conn.Close();
}
}
public void ReadPhoto(string url)
{
string sql
= "select
photo from Table1 where ID = '0'";
SqlConnection
conn = new SqlConnection();
conn.ConnectionString
= "Data
Source=.\\SQLExpress;Integrated Security=true;AttachDbFilename=|DataDirectory|\\Database.mdf;User Instance=true";
SqlCommand
cmd = new SqlCommand(sql,
conn);
try
{
conn.Open();
SqlDataReader
reader = cmd.ExecuteReader();//采用SqlDataReader的方法来读取数据
if (reader.Read())
{
byte[]
photo = reader[0] as byte[];//将第0列的数据写入byte数组
FileStream
fs = new FileStream(url,FileMode.CreateNew);创建FileStream对象,用于写入字节数据流
fs.Write(photo,0,photo.Length);//将byte数组中的数据写入fs
fs.Close();//关闭fs
}
reader.Close();//关闭reader
}
catch (Exception
ex)
{
throw;
}
finally
{
conn.Close();
} }}
来源:http://blog.csdn.net/zzp_403184692/article/details/8092408


猜你喜欢
- Spring Framework 提供了一套可以方便地对 Controller 层中接收的参数进行校验的框架,其中就包括了 @Validat
- 前言最近因为工作的需要,在写一个基于springmvc+spring+mybatis的项目,其中涉及用ajax向controller发送数据
- 当我们打开app的时候是不是会有一瞬间的白屏然后再进入主活动,虽然这并不会造成什么不好的后果,但是感觉用户体验就不是很好。像网易云音乐等等
- 使用 DateFormat 格式化日期、时间DateFormat 也是一个抽象类,它也提供了如下几个类方法用于获取 DateFormat 对
- 本文实例讲述了C#实现根据年份计算生肖属相的方法。分享给大家供大家参考。具体分析如下:提供年份可以输出属相,代码比较简单,因为2008年为鼠
- 前言作为一个后端程序员,网络连接这块是一个绕不过的砍,当你在做服务器优化的时候,网络优化也是其中一环,那么作为网络连接中最基础的部分-TCP
- 常量,顾名思义,就是“不会改变的量”。我们平时书写的数字(比如12.85)、字符(比如'F')、字符串(比如"谢谢
- 我们用NuGet还原.NET Core项目会报以下错误:error NETSDK1064: 未找到版本为 1.8.2 的包 BouncyCa
- 我们开始今天的正文。首先,来看一下今天分享的并发编程最佳学习路线包含哪些内容。最佳学习路线接下来,我们再来依次看下具体要学习哪些知识吧。并发
- 本文实例讲述了Android基于ListView实现类似Market分页加载效果。分享给大家供大家参考,具体如下:最近几天研究ListVie
- 本文实例讲述了Android网络数据开关用法。分享给大家供大家参考,具体如下:api中没有开放这部分接口。因此大家可以使用这个方法,true
- 使用Spring data JPA开发已经有一段时间了,这期间学习了一些东西,也遇到了一些问题,在这里和大家分享一下。前言:Spring d
- 今天朋友圈又火了,听说原因是 @腾讯官网 就能得到一顶绿色的帽子,啊呸,是一个好看的国庆节头像,可是听说没一会就502了,那么我们自己动手实
- 结构:安装NuGet包:using SAP.Middleware.Connector;using System.Data;namespace
- 前段时间摸索了java调用matlab东西,不说学的有多深,也算有结果了,达到目的了。也即用java程序可以调用matlab中函数了。&nb
- 1、使用JPA 的@Enumerated 注解 ,可以直接将Enum映射到数据库中。但是value的值只有两种方式选择,一种是使用枚举的序号
- 效果:说明:输入小数,然后输入要保留的位数,事件:点击Button代码:public static double Round(double
- Java多态成员访问的特点多态概要多态是面向对象编程的三个特性之一,这里不展开做过多介绍,有机会专门写一个关于继承,封装,多态三大特性的文章
- 本文实例为大家分享了SpringBoot获取yml和properties配置文件的具体代码,供大家参考,具体内容如下(一)yml配置文件:p
- 本文实例讲述了Android控件之GridView用法。分享给大家供大家参考。具体如下:GridView是一项显示二维的viewgroup,