在初次接触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 参数化查询的更多相关文章

  1. SQL参数化查询自动生成SqlParameter列表

    string sql = @"INSERT INTO stu VALUES (@id,@name) "; 参数化查询是经常用到的,它可以有效防止SQL注入.但是需要手动去匹配参数@ ...

  2. SQL 参数化查询 应用于 Like

    在sql 进行参数化查询的时候,使用like 语句和参数的时候,错误的写法:  Participant like '%@Participant%' ,这样在数据库为解析为 '%'participant ...

  3. SQL参数化查询--最有效可预防SQL注入攻击的防御方式

    参数化查询(Parameterized Query 或 Parameterized Statement)是访问数据库时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值. 在使用参 ...

  4. SQL参数化查询的问题

    最近碰到个问题, SQL语句中的 "... like '%@strKeyword%'"这样写查不出结果, 非的写成 "... like '%" + strKey ...

  5. sql 参数化查询问题

    一.正确案例 string name=“梅”; string sql="select * from test where  Name  like @Name"; //包含 梅Sql ...

  6. SQL参数化查询

    参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...

  7. mybatis的sql参数化查询

    我们使用jdbc操作数据库的时候,都习惯性地使用参数化的sql与数据库交互.因为参数化的sql有两大有点,其一,防止sql注入:其二,提高sql的执行性能(同一个connection共用一个的sql编 ...

  8. sql参数化查询避免注入漏洞的原因探析

    网上其他同学的都说是重用执行计划,将用户输入的作为文本查询,到底如何实现,我用下面三行代码来解析一下. DECLARE @test NVARCHAR() SET @test=' or 1='1 SEL ...

  9. sql参数化查询in的参数

    private Query setParameter(Query query, Map<String, Object> map) { if (map != null) { Set<S ...

随机推荐

  1. matplotlib 知识点11:绘制饼图(pie 函数精讲)

    饼图英文学名为Sector Graph,又名Pie Graph.常用于统计学模块. 画饼图用到的方法为:matplotlib.pyplot.pie( ) #!/usr/bin/env python # ...

  2. context.xml

    <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF ...

  3. java中存在垃圾回收机制,但是还会有内存泄漏的问题,原因是

    答案是肯定的,但不能拿这一句回答面试官的问题.分析:JAVA是支持垃圾回收机制的,在这样的一个背景下,内存泄露又被称为“无意识的对象保持”.如果一个对象引用被无意识地保留下来,那么垃圾回收器不仅不会处 ...

  4. jdbc 操作步骤详解

    package com.itheima.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  5. ZK请求处理

    1. 事务请求转发-事务必须由Leader处理 所有非Leader的服务器收到来自客户端的事务请求,都会将客户端请求已REQUEST形式转发给Leader服务器进行处理 2. 事务处理 Proposa ...

  6. matlab 常用函数(数学建模-复习)

    常用函数 fscanf(fid, '%c', inf) -> 直接读取整个文件, 因为inf表示无穷 strtrim char(num): 将num转为ASCII字符 strtok(conten ...

  7. springboot 学习笔记(九)

    springboot整合activemq,实现broker集群部署(cluster) 1.为实现jms高并发操作,需要对activemq进行集群部署,broker cluster就是activemq自 ...

  8. poj3334(Connected Gheeves)

    Connected Gheeves Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1008   Accepted: 368 ...

  9. C# linq根据自定义筛选条件和所对应的数值进行筛选

    在软件应用中有时候会出现这样的界面:上面是利用多选框和下拉框组合的筛选条件.下面表格展示筛选后的数据.如下图 上面是筛选条件,表格是根据筛选条件筛选的结果. 如果表格不支持筛选功能.可以利用Linq对 ...

  10. 500 Days Of Summer

    <和莎莫的500天>,一部爱情片. Summer和Tom两人不同的爱情观走在了一起,或许真的就是爱情观不同,或许是Summer爱Tom爱的不够深,最终的结局是那么不尽人意. 有人愿意把秘密 ...