惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
S
Security @ Cisco Blogs
S
Security Affairs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
Forbes - Security
Forbes - Security
H
Heimdal Security Blog
A
Arctic Wolf
NISL@THU
NISL@THU
P
Proofpoint News Feed
W
WeLiveSecurity
S
Schneier on Security
AI
AI
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
I
Intezer
S
Securelist
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
Last Week in AI
Last Week in AI
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
罗磊的独立博客
月光博客
月光博客
雷峰网
雷峰网
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events

博客园 - 阿栋.c#

Ubuntu 12.10 安装 JDK 7u15官方版 sql2005新特性 for xml , outer apply ,多行转成单列方法 完美解决Android系统短信发送每小时限制100条问题 PAZU -- 4Fang WEB 打印控件 正则表达式删除指定的HTML 标签 - 阿栋.c# - 博客园 数据库备份还原到指定时间 转---支持非主键排序的SQL存储过程 人事管理系统的一般功能需求 ASP.NET木马及Webshell安全解决方案 在 64 位版本的 Windows 上,如何在 32 位版本的 ASP.NET 1.1 和 64 位版本的 ASP.NET 2.0 之间切换 win2003,IIS6.0 不能上传大于200K文件的解决办法 JavaScript:全面解析Ajax跨站数据传输和iframe跨域名js调用 SQL2000 排名 注册表 SAM - 阿栋.c# - 博客园 jquery radio,checkbox,select操作 - 阿栋.c# - 博客园 ACCESS的参数化查询,附VBSCRIPT(ASP)和C#(ASP.NET) eWebeditor集成aspjpeg 删除master库中不安全的扩展存储过程 ASP在使用SQL SERVER存储过程中的问题
参数化查询
阿栋.c# · 2008-06-19 · via 博客园 - 阿栋.c#

使用参数化查询的好处:可以防止sql注入式攻击,提高程序执行效率。
  针对sql server .net data Provider,我们可以使用@作为前缀标记的参数。比如:
  const string connStr = "Data source=bineon;user=sa;password=test;initial catalog=northwind;";
  string sql = "select ProductID,ProductName from Products";
  sql += " where CategoryID = @CategoryID and ProductID < @CategoryID ";
  SqlConnection conn = new SqlConnection(connStr);
  SqlCommand cmd = new SqlCommand(sql,conn);
  cmd.Parameters.Add("@CategoryID",CategoryIDValue);
  cmd.Parameters.Add("@MaxProductID",MaxProductIDValue);
  conn.Open();
  SqlDataReader reader = cmd.ExecuteReader();
  上面的代码段在定义sql语句的时候使用了两个参数@CategoryID和@CategoryID。为了是参数在执行过程中获得具体值,我们使用Prarmeter对象,通过它把参数添加到Command对象上,这样就获得参数化查询。
  当然上面使用的add方法有其他重载版本,比如我们可以自己定义Parameter对象然后再添加:
  SqlParameter para = new SqlParameter("@CategoryID",CategoryIDValue);
  cmd.Parameters.Add(para);
  上面SqlParameter的构造函数也有多个重载版本。具体可以查看msdn。
   注意:上面的参数必须使用@前缀,另外也不仅仅是查询才能使用参数,其他更新数据库的操作类似的都能采用参数。
   上面我们给出了针对sql server参数化查询的方法,现在我们讨论在OLEDB 和ODBC中指定参数。
   其实这两种Provider都不支持指定参数的方法,但是我们可以在查询中使用(?)作为占位符,去指定参数将出现的位置。
  sql = "select ProductID,ProductName from Products";
  sql += " where CategoryID =? and ProductID < ?";
  接下来我们同样应该把Parameter对象添加到Command的Parameters集合里面,但是这个时候注意参数添加的顺序必须和你使用?的顺序相通,这个是与上面sql server .net data Provider不同的地方。
  OleDbCommand cmd = new OleDbCommand(sql,conn);
  cmd.Parameters.Add(“CatID”,CategoryIDValue);
  cmd.Parameters.Add(“MaxProductID”,MaxProductIDValue);
  如果上面添加参数的次序弄反了,那么MaxProductIDValue将被指定到第一个?那里,那么就出错了。另外上面的参数名CatID和MaxProductID无所谓,你怎么命名都可以,甚至是空串也行。
   注意:上面参数名无所谓,但是添加参数的次序很重要,不能颠倒。同样的其他更新数据库的操作也支持(?)占位符。

附:

Command对象所提供的属性:  
    ACTIVECONNECTION:ActiveConnection属性可以用来设定该Command对象要依赖哪一个Connection通道来与数据库互相沟通,因此该属性可以直接传入一已与数据库建立链接的Connection对象或是更方便的使用数据库链接字符串取代。  
    COMMANDTEXT:CommandText属性允许三种类型的数据查询信息,包括一般的SQL语句、数据库表单名称以及子程序名称,而决定是哪一种数据查询信息则是由另一属性CommandType来设定。  
    COMMANDTIMEOUT:有时候网络的状况不好造成网络响应缓慢,这时候Command对象的Execute方法在执行后会因此而造成服务器端数据库无法正常响应,从而造成停止运行,处于等待状态,遇到这种情况我们可以利用CommandTimeout属性来设定从开始执行数据查询(执行Execute)后允许继续执行的最长时间。CommandTimeout的默认值来30秒。  
    COMMANDTYPE:可以用CommandType属性来指定数据查询信息的类型见下表:  
  名称值                         整数值               功能  
  adcmdtext                     1                   指定数据查询信息的类型为SQL语句    
  adcmdtable                   2                   指定数据查询信息的类型为数据库表名称    
  adcmdstoredproc         4                   指定数据查询信息的类型为子程序名称    
  adcmdunknown               8                   未知的请求信息类型    
   
    PREPARED:如果服务器的数据库链接控制(例如ODBC)提供数据查询信息先行编译的功能,那么我们可以把Prepared属性设为true,如此一来可以加快数据库查询的速度。