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. maven编译时GBK错误

    一.问题描述 今天在MyEclipse中使用Maven编译项目源代码时,结果如下了如下的错误 百思不得其解啊,Java源代码在MyEclipse中显示是没有任何错误的,可是执行"maven ...

  2. Google maps api demo 2

    demo /** * @fileoverview Sample showing capturing a KML file click * and displaying the contents in ...

  3. Floyd算法--一个人的旅行

    2017-07-27 22:37:32 writer:pprp 题目如下: 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人 ...

  4. scala学习手记3 - var和val

    scala中用var和val定义变量都是可以的. 用val定义的变量是不可变的,被初始化后值就固定下来,不可以再被修改(这类似于java中的final关键字):用var定义的变量是可变的,可以任意修改 ...

  5. Java多线程 - Callable和Future

    已知的创建多线程的方法有继承Tread类和实现Runnable方法.此外Java还提供了Callable接口,Callable接口也提供了一个call()方法来做为线程执行体.但是call()方法与r ...

  6. libnetwork 源码浅析

    [编者的话]从docker 1.6开始关注docker网络这块,从原来的铁板一块,到后来的libnetwork拆分,到现在的remote driver,docker 一直在改进.功能缺失,实用性不足, ...

  7. css3 放大缩小代码

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. python+mitmproxy抓包过滤+redis消息订阅+websocket实时消息发送,日志实时输出到web界面

    本实例实现需求 在游戏SDK测试中,经常需要测试游戏中SDK的埋点日志是否接入正确.本实例通过抓包(客户端http/https 请求)来判定埋点日志是是否接入正确. 实现细节:使用django项目,后 ...

  9. python 爬虫004-使用urllib2与正则表达式扒取糗事百科新鲜页首页帖子

    面向过程的方式 #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import sys import re import os ...

  10. 三个大数据处理框架:Storm,Spark和Samza 介绍比较

    转自:http://www.open-open.com/lib/view/open1426065900123.html 许多分布式计算系统都可以实时或接近实时地处理大数据流.本文将对三种Apache框 ...