探秘不同寻常的ADO.NET参数介绍

开发 后端
对于我们掌握怎样正确使用ADO.NET参数是很有帮助的,而且也可从中学到不少编程技巧,例如委托和模板方法。希望大家一起研究下。

在ADO.NET参数中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段使用参数化SQL语句很容易就能赋值。

所以本人经常在ADO.NET参数化SQL语句,近几年来陆续跟SQL Server/Oracle/ MySQL/Access打交道,积累了一些心得,现在整理出来供大家参考。我们假设数据可的结构如下图(设置的数据库为Oracle10g):

  1. create table S_Admin (  
  2. UserName varchar(60) not null,  
  3. Password varchar(60) not null,  
  4. Remarkvarchar(50) null,  
  5. Mail  varchar(120)not null,  
  6. AddDate  datetime null default GETDATE(),  
  7. LoginDatedatetime null default GETDATE(),  
  8. LoginIP  varchar(50) null,  
  9. Activesmallint null default 1,  
  10. LoginCount  intnull default 1,  
  11. Power intnull default 0,  
  12. Departid intnull default 0,  
  13. constraint PK_S_ADMIN primary key nonclustered (UserId)  
  14. )  
  15. go 

需要说明的是,除了Access之外,操作其它数据库可以不必要按照参数在SQL语句中出现的顺序添加进去一样可以正确执行,但是在Access中一定按照插入的列的顺序添加参数,因为“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的定位参数,而不使用命名参数(MSDN)”,所以给添加参数和赋值一定要按照列的顺序。

通过上面的例子,基本上可以总结出一个规律:在参数化SQL中参数名的格式跟其在存储过程中生命存储过程参数一致,例如在Oracle中存储过程参数一律以”:”开头,在MS SQL Server中存储过程参数一律以”@”开头,而在MySQL中存储过程(MySQL从5.0以后版本支持存储过程)参数一律以“?#t#

”开头,所以在参数化SQL语句中参数名有些不一样(记得在csdn上有朋友提到过不知道为什么MySQL中参数化SQL语句中要用“?”而不是和SQL Server一样使用”@”),如果那位朋友看过本文,我想他就会解开这个疑虑了。

责任编辑:chenqingxiang 来源: 博客园
相关推荐

2010-02-01 18:13:34

Python

2009-12-21 14:04:48

ADO.NET参数

2009-12-30 14:03:36

ADO.NET Ent

2009-09-09 10:23:59

ADO.NET连接

2009-11-12 13:26:56

使用ADO.NET参数

2009-12-30 10:32:04

扩展ADO.NET

2010-01-04 10:48:30

ADO.NET特色

2009-12-31 16:09:22

ADO与ADO.NET

2009-11-11 10:27:22

ADO.NET入门

2009-12-22 15:20:25

ADO.NET功能

2009-12-22 11:17:58

ADO.NET产品

2009-12-25 14:23:35

ADO.NET设置

2009-12-30 16:05:20

ADO.NET实例

2009-12-21 15:58:19

ADO.NET集合

2009-12-21 10:37:05

Ado.Net 实例

2009-12-23 10:18:21

ADO.NET 应用程

2009-12-31 14:18:46

ADO.NET类库

2009-11-11 09:11:19

2009-12-24 13:38:07

ADO.NET技术

2011-05-20 11:31:07

ADO.NET
点赞
收藏

51CTO技术栈公众号