加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

存储过程 – ASP Classic – Recordset对象与命令对象

发布时间:2020-12-16 09:58:33 所属栏目:asp.Net 来源:网络整理
导读:我正在使用ASP Classic和SQL Server 2000来创建动态网站. 我对何时使用记录集对象以及何时在查询数据库时使用命令对象感到困惑. 有人告诉我,如果存储过程将从SELCT语句返回记录,那么我应该使用记录集,但是如果我更新或插入,那么我应该使用命令对象并将所有数
我正在使用ASP Classic和SQL Server 2000来创建动态网站.

我对何时使用记录集对象以及何时在查询数据库时使用命令对象感到困惑.

有人告诉我,如果存储过程将从SELCT语句返回记录,那么我应该使用记录集,但是如果我更新或插入,那么我应该使用命令对象并将所有数据作为参数传递给存储过程.

使用记录集时,我经常传递任何所需的数据,如下所示:

rs.Source = "spTest "   & id

我总是验证我传递的数据,以确保它是我期待的并将其转换为正确的类型.

我被告知,上面的方法让我的代码对SQL注入攻击开放,我应该总是使用命令对象.

它是否正确?

谢谢

解决方法

恩,那就对了.

想象一下有人传递字符串:’0;从用户删除*;’

您的查询将是:

spTest 0; delete * from users;

如果你很幸运,你将没有用户表.就个人而言,我会一直使用命令对象来保持一致性.您可以从中获得所需的一切.

以下是如何使用命令对象执行此操作的快速示例:

Dim oStoredProc : Set oStoredProc = Server.CreateObject("ADODB.Command")

    With oStoredProc
        .ActiveConnection = oDBConnection
        .CommandType = adCmdStoredProc
        .CommandText = "up_procname"
        .Parameters.Append(.CreateParameter("@Param1",ADODB.adInteger,ADODB.adParamInput,22,11))
        .Parameters.Append(.CreateParameter("@Param2",ADODB.adParamOutput,12)

        Call .Execute()

        myVal = .Parameters("@Param2")
    End With

    Set oStoredProc = Nothing

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读