sql 参数化查询
在初次接触sql时,笔者使用的是通过字符串拼接的方法来进行sql查询,但这种方法有很多弊端
其中最为明显的便是导致了sql注入。
通过特殊字符的书写,可以使得原本正常的语句在sql数据库里可编译,而输入者可以达到某些非法企图甚至能够破坏数据库。
而参数化查询有效解决了这个问题,参数化查询是通过将传入的sql语句其他部分进行编译后再将其需要查询的数据插入其中然后查询,防止了在被查询信息中出现语句的情况。
具体代码例子如下:
/// <summary>
/// 通用sql获得语句,在第一个参数传入sql语句,接下来以此写入在sql中参数化的位置与需要用于替代的字符
/// </summary>
/// <param name="sqlstring"></param>
/// <param name="items"></param>以数组方式传入可同时对sql语句多个位置进行赋值
/// <returns></returns>
public DataTable Sql_Get_Datatable(string sqlstring, params string[] items)
{
string database = database_global;
string str = @"server=DESKTOP-8ROVJ5G;Integrated Security=SSPI;database=" + database;
//Integrated Security 综合安全,集成安全
try
{
string ConnectionString = @"server=DESKTOP-8ROVJ5G;Integrated Security=SSPI;database=" + database;
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand(); //生成新的连接
cmd.Connection = conn; int i;
for (i = ; i < items.Length; i += ) //循环替换字符串中相应位置的参数,一个@something 对应一个 somenting
{
cmd.Parameters.Add("@"+items[i], SqlDbType.VarChar);
cmd.Parameters["@" + items[i]].Value = items[i+];
} SqlDataAdapter da = new SqlDataAdapter(cmd); //注意,此处参数应为设置完成的cmd
DataTable dt = new DataTable();
da.Fill(dt);
conn.Close();
conn.Dispose();
return dt;
}
catch
{
return null;
}
}
这是笔者自己写的一个简单的通过传入sql语句与相关参数获取相应DataTable数据的方法, 通过这种方法比为每一个需求写一个方法来得封装性更好一些。
sql 参数化查询的更多相关文章
- SQL参数化查询自动生成SqlParameter列表
string sql = @"INSERT INTO stu VALUES (@id,@name) "; 参数化查询是经常用到的,它可以有效防止SQL注入.但是需要手动去匹配参数@ ...
- SQL 参数化查询 应用于 Like
在sql 进行参数化查询的时候,使用like 语句和参数的时候,错误的写法: Participant like '%@Participant%' ,这样在数据库为解析为 '%'participant ...
- SQL参数化查询--最有效可预防SQL注入攻击的防御方式
参数化查询(Parameterized Query 或 Parameterized Statement)是访问数据库时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值. 在使用参 ...
- SQL参数化查询的问题
最近碰到个问题, SQL语句中的 "... like '%@strKeyword%'"这样写查不出结果, 非的写成 "... like '%" + strKey ...
- sql 参数化查询问题
一.正确案例 string name=“梅”; string sql="select * from test where Name like @Name"; //包含 梅Sql ...
- SQL参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...
- mybatis的sql参数化查询
我们使用jdbc操作数据库的时候,都习惯性地使用参数化的sql与数据库交互.因为参数化的sql有两大有点,其一,防止sql注入:其二,提高sql的执行性能(同一个connection共用一个的sql编 ...
- sql参数化查询避免注入漏洞的原因探析
网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...
- sql参数化查询in的参数
private Query setParameter(Query query, Map<String, Object> map) { if (map != null) { Set<S ...
随机推荐
- Mysql遍历大表(Mysql大量数据读取内存溢出的解决方法)
mysql jdbc默认把select的所有结果全部取回,放到内存中,如果是要遍历很大的表,则可能把内存撑爆. 一种办法是:用limit,offset,但这样你会发现取数据的越来越慢,原因是设置了of ...
- myeclipse-9.0安装svn客户端插件
SVN插件配置到MyEclipse中的步骤 听语音 | 浏览:20471 | 更新:2015-01-09 10:26 | 标签:myeclipse 1 2 3 4 5 6 7 分步阅读 MyEclip ...
- 07.Spring Bean 加载 - BeanDefinitionReader
基本概念 BeanDefinitionReader ,该接口的作用就是加载 Bean. 在 Spring 中,Bean 一般来说都在配置文件中定义.而在配置的路径由在 web.xml 中定义.所以加载 ...
- Unity UGUI暂停按钮切换图片代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...
- Storm概念学习系列之storm的设计思想
不多说,直接上干货! storm的设计思想 在 Storm 中也有对流(Stream)的抽象,流是一个不间断的.无界的连续 Tuple(Storm在建模事件流时,把流中的事件抽象为 Tuple 即元组 ...
- 行高:line-height图文解析
行高——line-height 初入前端的时候觉得CSS知道display.position.float就可以在布局上游刃有余了,随着以后工作问题层出不穷,才逐渐了解到CSS并不是几个style属性那 ...
- Jedis使用工具类
Redis 使用工具类: package com.qlwb.business.common.redis; import org.apache.log4j.Logger; import redis.cl ...
- oracle中scott用户下四个基本表SQL语句练习
--选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...
- 从零开始的全栈工程师——js篇2.1(js开篇)
JS开篇 一.js介绍 全称 javascript 但不是java 他是一门前台语言 而java是后台语言js作者 布兰登·艾奇 前台语言:运行在客户端的后台语言:跟数据库有关的 能干什么? 页 ...
- ArrayList,Vector, LinkedList 的存储性能和特性
ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...