private void AddStudent(){

string strName =txtName.Text.Trim();

string strPwd = txtPwd.Text.Trim();

string strSql ="insert into Student (name,pwd)  values(@name,@pwd) ";

SqlConnection conn = new SqlConnection("  server=.;database=TestDB;uid=sa;pwd=pwd123 ");

SqlCommand cmd = new SqlCommand(strSql,conn);

//参数数组 对应Sql语句中的参数

SqlParameter [] paras ={

new SqlParameter("@name",strName),

new SqlParameter("@pwd",strPwd)

};

cmd.Parameters.AddRange(paras);

conn.Open();

int result = Convert.ToInt32(cmd.ExecuteScalar());

conn.Close();

if(result>0){

...

}eles{

...

}

}

上面的代码是访问SQL Server数据库的代码。如果本文中提到的数据分别在Access、MySQL、Oracle数据库,那么对应的参数化SQL语句及参数分别如下:

数据库 Access MySQL Oracle
 SQL语句 select * from UserInfo where sex=? and age>? select * from UserInfo where sex=?sex and age>?age select * from UserInfo where sex=:sex and age>:age
参数 OleDbParameter MySqlParameter OracleParameter
实例化参数 OleDbParameter p=new OleDbParameter(“?”, OleDbType. Boolean); MySqlParameter p=new MySqlParameter(“?sex”, MySqlDbType.Bit); OracleParameter p=new OracleParameter(“:sex”, OracleType.Byte);
赋值 p.Value=true; p.Value=1; p.Value=1;

通过上面的实例代码我们可以看出尽管SQL语句大体相似,但是在不同数据库的特点,可能参数化SQL语句不同,例如在Access中参数化SQL语句是在参数直接以“?”作为参数名,在SQL Server中是参数有“@”前缀,在MySQL中是参数有“?”前缀,在Oracle中参数以“:”为前缀。
注意:因为在Access中参数名都是“?”,所以给参数赋值一定要按照列顺序赋值,否则就有可能执行出错。

以下是 oracle数据库中:

  public DataTable CheckUser(string userName, string pwd)
{ OracleConnection conn = new OracleConnection(connStr);
DataTable dt = new DataTable();
string sql = string.Format(@"SELECT
GUID, USERNAME, PWD,
CREATEDATE,NICKNAME
FROM F_USERS WHERE status =1 and USERNAME =:USERNAME and PWD =:PWD");
try
{ //参数数组 对应Sql语句中的参数
OracleParameter[] paras ={
new OracleParameter(":USERNAME",userName),
new OracleParameter(":PWD",pwd)
}; OracleCommand cmd = new OracleCommand(sql, conn);
cmd.Parameters.AddRange(paras);
conn.Open();
OracleDataAdapter oda = new OracleDataAdapter(cmd);
oda.Fill(dt);
return dt;
}
catch
{
return dt;
}
finally
{
conn.Close();
}
}

参数化防SQL注入的更多相关文章

  1. 防SQL注入:生成参数化的通用分页查询语句

    原文:防SQL注入:生成参数化的通用分页查询语句 前些时间看了玉开兄的“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程.使用这种通用的存 ...

  2. C#防SQL注入代码的实现方法

    对于网站的安全性,是每个网站开发者和运营者最关心的问题.网站一旦出现漏洞,那势必将造成很大的损失.为了提高网站的安全性,首先网站要防注入,最重要的是服务器的安全设施要做到位. 下面说下网站防注入的几点 ...

  3. .Net防sql注入的方法总结

    #防sql注入的常用方法: 1.服务端对前端传过来的参数值进行类型验证: 2.服务端执行sql,使用参数化传值,而不要使用sql字符串拼接: 3.服务端对前端传过来的数据进行sql关键词过来与检测: ...

  4. 【荐】PDO防 SQL注入攻击 原理分析 以及 使用PDO的注意事项

    我们都知道,只要合理正确使用PDO,可以基本上防止SQL注入的产生,本文主要回答以下几个问题: 为什么要使用PDO而不是mysql_connect? 为何PDO能防注入? 使用PDO防注入的时候应该特 ...

  5. C#语言Winform防SQl注入做用户登录的例子

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  6. PHP防SQL注入不要再用addslashes和mysql_real_escape_string

    PHP防SQL注入不要再用addslashes和mysql_real_escape_string了,有需要的朋友可以参考下. 博主热衷各种互联网技术,常啰嗦,时常伴有强迫症,常更新,觉得文章对你有帮助 ...

  7. mysql之数据库连接的方法封装及防sql注入

    一.定义数据库和表 create database animal; CREATE TABLE `pet` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name ...

  8. nginx服务器防sql注入/溢出攻击/spam及禁User-agents

    本文章给大家介绍一个nginx服务器防sql注入/溢出攻击/spam及禁User-agents实例代码,有需要了解的朋友可进入参考. 在配置文件添加如下字段即可  代码如下 复制代码 server { ...

  9. php防sql注入、xss

    php自带的几个防止sql注入的函数http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2013/0318/12234.html addslashe ...

随机推荐

  1. spring security实现限制登录次数功能

    本节是在基于注解方式进行的,后面的例子都会基于注解形式,不再实现XML配置形式,毕竟注解才是趋势嘛! 关键在于实现自定义的UserDetailsService和AuthenticationProvid ...

  2. 洛谷P4311 士兵占领

    题目描述 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵 ...

  3. JavaScript中this关键字的使用比较

    JavaScript中this关键字的使用比较 this关键字在JavaScript中,用的不能说比较多,而是非常多.那么熟悉this关键字的各种用法则显得非常关键. this有时候就是我们经常说的上 ...

  4. scala学习手记19 - Option类型

    看到Option类型就知道这本教材应该要说那个了. 使用过guava后,应该知道guava中的Optional类的作用是什么.算了找下原始文档好了: Optional<T> is a wa ...

  5. 数据库连接池 c3p0 druid

    druid 数据库连接池 c3p0 使用C3P0数据源时需要依赖 mchange-commons-java-0.2.3.4.jar包.缺少该jar包则会报错!

  6. eclipse indigo 安装 Eclipse Marketplace Client

    打开 eclipse,help--Eclipse Marketplace Client就能找到 有的eclipse中没有这个功能就需手动添加Eclipse Marketplace Client. he ...

  7. python fire库的使用

    一. 介绍 fire是python中用于生成命令行界面(Command Line Interfaces, CLIs)的工具,不需要做任何额外的工作,只需要从主模块中调用fire.Fire(),它会自动 ...

  8. vue-cli 脚手架项目简介(一) - package.json

    vue-cli是用来生成 vue项目的命令行工具,它的使用方法是这样的: vue init <template-name> <project-name>第二个参数 templa ...

  9. Node net模块与http模块一些研究

    这周遇到一个有意思的需求,端上同学希望通过 socket 传送表单数据(包含文件内容)到 node 端,根据表单里的文件名.手机号等信息将文件数据保存下来.于是我这样写了一下--socket_serv ...

  10. 用同步的方式执行jQuery异步动画

    在编写jQuery动画时,通过回调函数进行动画队列的编排,但当回调过多,往往会出现这样的代码: $(".box1").fadeIn(1000,function(){ $(" ...