参数化存储过程的ADO.NET使用

    处理SQL Server数据库存储过程输入和输出参数的ADO.NET类是DbCommand。DbCommand是负责在数据库上执行命令的,所以它也负责处理它们的参数。(DbCommand是一个公共类,它总是引用一个“真正”的命令对象,如SQLCommand。)
    1、使用输入参数
    在给一个命令对象添加一个输入参数时,同时需要 指定 参数名称、数据类型和值。DbCommand对象把这些参数存放在一个名为Parameters的集合中,它属于DbParameter对象。
    每个DbParameter实例表示一个参数。使用CreateParameter方法为这个命令创建了一个DbParameter对象。并设置了它的属性,最后把这个参数添加到命令的参数集合中。
    示例代码如下:
// 创建一个新的参数
DbParameter param  =  comm.CreateParameter();//创建一个新的参数
param.ParameterName 
=   " @name " ; // 参数名称
param.Value  =  value; //
param.DbType  =  DbType.Int32; // 数据类型
comm.Parameters.Add(param);//把这个参数添加到命令的参数集合
   命令的CreateParameter方法,总是返回一个特定于所使用的数据提供程序的参数对象,因此,如果是SQL Server数据库,则DbParameter实际上是指向SqlParameter实例。
   2、使用输出参数
    存储过程的输出参数在存储过程中被赋值,等存储过程执行完成后,调用该过程的函数就可以读取该值,想返回非整型数据,或想用返回值来表示执行成功的标志(或其它用途)时,输出参数都很有用。
    示例代码如下:
// 创建一个新的参数
DbParameter param  =  comm.CreateParameter();
param.ParameterName 
= " @OutputName " ; // 参数名称
param.Direction  =  ParameterDirection.Output; // 输出参数
param.DbType  =  DbType.Int32; // 参数类型
comm.Parameters.Add(param); // 把这个参数添加到命令集的参数集合
    这与输入参数的代码几乎一样,除了应为参数提供一人值,并将Direction属性的值设置为ParameterDirection.Output之外。这将告诉命令@OutputName是一个输出参数。
    3、存储过程参数不是强类型
    在添加存储过程参数时,应使用与存储过程中一样的名称、类型和大小。但并不用总是这么做,因为SQL SERVER是非常灵活的并能自动做类型转换。例如,可以用VarChar或NvarChar类型来添加@ID,只要这个值中包含一个数字就行。在业务层中,建议为参数指定正确的数据类型,DbParameter对象总是会检查你所赋的值,看它是否可转换成特定的数据类型,如果不行,就会产生一个异常。这样,就可以在业务层中控制,伪造的值将无法送到数据库,从而避免数据库被破坏。
    在业务层的C#方法总是以字符串类型从表示层中获取它们的参数。为这种架构选择这种方法,是为了保护表示层不被数据类型所困扰。如:不用关心ID的类型(123或ABC)。这是业务层的任务,即解释数据和检查它的正确性。
    4、从输出参数中获取结果
    在执行完带有输出参数的存储过程后,或许想从这些参数中读取返回值。这可以在执行完该存储过程并关闭数据库连接后,从DbParameter对象中读取参数值。
    在业务层中,有用来获取输出参数值的代码如下: 
int  outPutName  =  Int32.Parse(comm.Parameter[ " @OutputName " ].ToString());
    ToString()用于返回值转换成一个字符串,然后再解析或转换为整数。


转载于:https://www.cnblogs.com/sdk365/archive/2007/09/05/882932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值