今儿个,咱来聊聊我在捣鼓数据库时遇到的一个玩意儿——IDataParameter
。一开始我也没搞明白这是个后来一通实践,总算是摸清它的脾气。
初识 IDataParameter
记得那天,我正吭哧吭哧地写着代码,要往数据库里塞数据。本来,直接把数据拼到 SQL 语句里就完事,就像这样:
int Id = 1;string Name = "老王";* = "insert into TUserLogin values("+Id+", '"+Name+"')";
可这么写,总觉得心里不踏实。万一这 Name 里头有啥特殊字符,或者以后 Id 也变成字符串,这不就乱套?而且这样写,代码看起来也乱糟糟的,不美观。
于是我就开始琢磨,有没有啥更好的法子。这时候,IDataParameter
就闪亮登场。
使用 IDataParameter
这 IDataParameter
,说白,就是一个接口。啥是接口?你可以把它想象成一个“约定”,它规定参数应该长啥样。具体的实现,还得靠各个数据库厂商自己来。比如,你要用 SQL Server,那就得用 SqlParameter
;你要用 Oracle,那就得用 OracleParameter
。不过不管用哪个,它们都得“遵守”IDataParameter
这个“约定”。
那咋用?也简单。我当时是这么干的:
- 先创建几个参数对象。
IDataParameter[] parameters = new IDataParameter[] { new SqlParameter("@Id", 1), new SqlParameter("@Name", "老王") };
你看,这里我用 SqlParameter
,因为我当时用的是 SQL Server。@Id
和 @Name
是参数的名字,后面跟着的是参数的值。
-
把参数加到
Command
对象里。
这一步,我当时是直接在 SQL 语句里用参数名:
* = "insert into TUserLogin values(@Id, @Name)";
然后把创建好的 parameters 数组加进去:
foreach (IDataParameter parameter in parameters)
*(parameter);
这么一来,Command
对象就知道该怎么处理这些参数。
- 执行 SQL 语句。
这一步就没啥好说的,直接执行就完事。
一点小感悟
用 IDataParameter
之后,我感觉代码一下子清爽不少。再也不用担心数据里有特殊字符,也不用费劲巴拉地去拼接 SQL 语句。而且这样做还有一个好处,就是可以防止 SQL 注入攻击。啥是 SQL 注入攻击?这个说来话长,以后有机会再细聊。
这只是 IDataParameter
的一种用法。我还看到有人直接在创建 DataBase 时把参数传进去,像这样:
DataBase db = new DataBase();SqlParameter[] prams = { *("@id",...) };
不过我当时没这么用,我觉得先创建参数对象,再加到 Command
对象里,这样更清楚些。
IDataParameter
这玩意儿,还是挺有用的。掌握它,写起代码来,心里更踏实,代码也更漂亮。今儿个就先聊到这儿,以后再遇到啥有意思的东西,再跟大家分享!