为什么要参数化执行SQL语句呢?

一个作用就是可以防止用户注入漏洞。

简单举个列子吧。

比如账号密码登入,如果不用参数,

写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧

sql:select id,pw where id='inputID' and pw='inputPW';

一般情况没什么问题,但如果用户输入的id或PW带 ‘ ,这是可能就会出现漏洞,bug了

比如用户输入的id是: 1‘ or ’1‘=‘1

这是sql语句执行的是:select id,pw where id='1‘ or ’1‘=‘1 ‘ and pw='inputPW';

那数据库里的所有账号密码都符合这个条件了。

简而言之,用户可以通过 ' 来改变你SQL的执行。

参数化就可以避免这个问题了。

/************************非查询操作*****************************************/

//今天太晚了,先写个非查询操作的,明天在写查询操作的。

/****函数*****/
/// <summary>
/// 增删改数据,返回影响行数,没有则返回-1
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="ps">参数</param>
/// <returns>返回影响行数</returns> static string connStr ="server=IP;User Id=账号名;password=密码;Database=表名";
public static int ExecuteNonQuery(string sql, params MySqlParameter[] ps)
{ using (MySqlConnection conn = new MySqlConnection(connStr))
{
using (MySqlCommand cmd = new MySqlCommand(sql, conn))
{
cmd.Parameters.AddRange(ps);
conn.Open();
return cmd.ExecuteNonQuery();//返回受影响行数
}
}
} /****应用举例****/ public void InsertData()
{
int cid=,aid=; string name="hha";
string sql = "insert into tb_compart (compartID,compartName,areaID)values(@compartID,@compartName,@areaID);";
MySqlParameter[] ps ={ new MySqlParameter("@compartID",(object)cid),
new MySqlParameter("@compartName",name),
new MySqlParameter ("@areaID",(object)aid)};
int r = Mysql.MySQLHelper.ExecuteNonQuery(sql, ps);//r得值就是受影响的行数,执行失败r=-1;
} }

C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】的更多相关文章

  1. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  2. MVC EF 执行SQL语句(转载)

    MVC EF 执行SQL语句 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 闲着没事,看了一篇关于LI ...

  3. easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)

    easyui datagrid 禁止选中行   没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...

  4. Python MySQLdb 执行sql语句时的参数传递

    使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd=&qu ...

  5. EF Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  6. nhibernate中执行SQL语句

    在有些时候,可能需要直接执行SQL语句.存储过程等,但nhibernate并没有提供一种让我们执行SQL语句的方法,不过可以通过一些间接的方法来实现. 下面给出一个在nhibernate中执行SQL语 ...

  7. linq直接执行sql语句

    1.ExecuteQuery方法 看命名,我们很容易联想到ado.net里熟悉的Command的ExecuteNonQuery方法,但是VS的智能提示告诉我们这个方法返回的是一个泛型集合,应该&quo ...

  8. EF中执行Sql语句

    Entity Framework是微软出品的高级ORM框架,大多数.NET开发者对这个ORM框架应该不会陌生.本文主要罗列在.NET(ASP.NET/WINFORM)应用程序开发中使用Entity F ...

  9. 4.5 .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

随机推荐

  1. ANDROID : java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64String in android

    Andriod系统包中现在已经自带加密函数,如果用apache的codec包则会报以上错误,用android.util.Base64以下方法代替org.apache.commons.codec.bin ...

  2. Spring学习笔记(一)

    1.1.1Spring是什么? Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发. 1.1.2S ...

  3. C# DataGridView使用记录分享

    最近使用DataGridView,把其中遇到的问题和一些知识记录下来,以便以后用到的时候可以快速的想起. 1.添加行号 有时我们在使用DataGridView时会被要求添加在每一行数据前面添加上行号, ...

  4. Java源码分析系列

    1) 深入Java集合学习系列:HashMap的实现原理 2) 深入Java集合学习系列:LinkedHashMap的实现原理 3) 深入Java集合学习系列:HashSet的实现原理 4) 深入Ja ...

  5. Unable to load native-hadoop library for your platform

    #HADOOP VARIABLES START export JAVA_HOME=/home/yang/jdk1.7.0_80export HADOOP_HOME=/home/hadoop/hadoo ...

  6. 简单C程序生成的汇编代码分析

    首先给出完整的C代码: int g(int x) { ; } int f(int x) { return g(x); } int main(void) { )+; } 使用命令:gcc –S –o h ...

  7. Node.prototype.contains

    document.documentElement.contains(document.body) // true document.documentElement.compareDocumentPos ...

  8. JUCE 界面库显示中文乱码问题

    JUCE 界面库显示中文乱码问题 环境: Windows7 64位 旗舰版 Visual Studio Ultimate 2012 JUCE 4.1 问题描述: 直接使用juce::String存储中 ...

  9. cosine similarity

    Cosine similarity is a measure of similarity between two non zero vectors of an inner product space  ...

  10. 改变ubuntu终端显示语言(桌面系统是中文,终端提示是英文)

    打开终端: $ vi .bashrc 最后添加 if [ "$TERM"="linux" ] ;then export LANGUAGE=en_US expor ...