热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ADO命令执行方法未填充ADO记录集-ADOrecordsetnotpopulatedbyADOcommandexecutemethod

IamdoingsomecleanuptoprotectfromSQLinjectionattackshappeninginaolderinternalwebsite

I am doing some clean up to protect from SQL injection attacks happening in a older internal website that uses ASP. Here's the gist of it all in code...

我正在做一些清理,以防止在使用ASP的旧内部网站中发生SQL注入攻击。以下是代码中所有内容的要点......

Database connection is setup in a separate asp file named connect.asp

数据库连接在名为connect.asp的单独asp文件中设置

<%
on error resume next

Set DB = Server.CreateObject("ADODB.Connection")
DB.CommandTimeout = 180
DB.COnnectionTimeout= 180

cOnnStr= "Provider=SQLOLEDB;Data Source=xxx-xxxx-xxxxxx;Initial Catalog=xxxx;Persist Security Info=True;User ID=xxxxx;Password=xxxxxxxxxxxx;"

DB.Open connStr

' Check DB connection and go to Error Handler is error exists
if DB.state=0 then
    Response.Write "

Cannot connect to database.

" TrapError Err.description Response.end end if %>

This works and the db connections is opened.

这有效,并且数据库连接已打开。

I have a file named DBFunctions.asp that I use to sort of map functions to stored procedures and their parameters. I am trying to use the function below to return a ADO recordset to another asp front end page.

我有一个名为DBFunctions.asp的文件,用于将映射函数排序到存储过程及其参数。我试图使用下面的函数将ADO记录集返回到另一个asp前端页面。

Function GetFacilityByFID(fid)
    set rs = server.CreateObject("ADODB.Recordset")
    Set cmd = Server.CreateObject("ADODB.Command")
    Set cmd.ActiveCOnnection= DB
    cmd.CommandText = "GetFacilityByFID"
    cmd.CommandType = adCmdStoredProc
    cmd.Parameters.Append cmd.CreateParameter("@FID", adVarChar, adParamInput, 20)
    cmd("@FID") = fid
    Set rs =  cmd.Execute
    Set GetFacilityByFID = rs       
End Function

Here is the code from the calling front end asp page, facDetail.asp

这是来自调用前端asp页面facDetail.asp的代码

<%

Dim FID, FCBI, Error
FID = Request("FID")
FCBI = Request("FCBI") 

' Check DB connection and go to Error Handler is error exists
if DB.state=0 then
    Response.Write "

Cannot connect to database.

" TrapError Err.description Response.end else if FID then Set RS = GetFacilityByFID(FID) elseif FCBI then Set RS = GetFacilityByFCBI(FCBI) end if if RS.EOF then Response.Write "

No record found

" response.End end if end if %>

The calling page is displaying that there are no records returned

调用页面显示没有返回记录

enter image description here

but the stored procedure works when executed in SSMS.

但是存储过程在SSMS中执行时有效。

Updated code

更新的代码

Here's the SQL Code for the GetFacilityByFID stored procedure.

这是GetFacilityByFID存储过程的SQL代码。

CREATE PROCEDURE [dbo].[GetFacilityByFID] 
    @FID varchar(20) 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT [FAC_CBI_NBR]
  ,[FAC_ID]
  ,[FAC_TYPE]
  ,[FAC_SUBTYPE]
  ,[FAC_REGION]
  ,[FAC_COST_CENTER]
  ,[FAC_SUPPLY_CODE]
  ,[FAC_UPLINE]
  ,[FAC_SERVICE]
  ,[FAC_LOCATION_NAME]
  ,[FAC_LOCAL_ADDR1]
  ,[FAC_LOCAL_ADDR2]
  ,[FAC_LOCAL_CITY]
  ,[FAC_LOCAL_STATE]
  ,[FAC_LOCAL_ZIP]
  ,[FAC_MAIL_ADDR1]
  ,[FAC_MAIL_ADDR2]
  ,[FAC_MAIL_CITY]
  ,[FAC_MAIL_STATE]
  ,[FAC_MAIL_ZIP]
  ,[FAC_COUNTRY]
  ,[FAC_PHONE]
  ,[FAC_FAX]
  ,[FAC_MANAGER]
  ,[FAC_CONTACT]
  ,[FAC_CONTACT_PHONE]
  ,[FAC_CONTACT_EXT]
  ,[FAC_CONTACT_EMAIL]
  ,[FAC_COMMENTS]
  ,[FAC_CHANGED_BY]
  ,[FAC_LAST_UPDATE]
  ,[FAC_MAILOUT]
  ,[FAC_CONTRACTION]
  ,[FAC_PROPERTY_CODE]
  ,[FAC_ATTN_TO]
FROM [cbid].[dbo].[FACILITY] 
WHERE [FAC_ID]=@FID
END

GO    

Can anyone tell me what is going wrong? I have been looking at this too long and have grown frustrated with it.

谁能告诉我出了什么问题?我一直在关注这个问题并且对此感到沮丧。

Any help will be greatly appreciated!

任何帮助将不胜感激!

Edit:

编辑:

Current Status of issue: getting the following from the ADO provider

当前问题状态:从ADO提供商处获取以下信息

Error Number: -2147217904 Error Desc: Procedure or function 'GetFacilityByFID' expects parameter '@FID', which was not supplied. Error Source: Microsoft OLE DB Provider for SQL Server

错误号:-2147217904错误描述:过程或函数'GetFacilityByFID'需要参数'@FID',这是未提供的。错误源:用于SQL Server的Microsoft OLE DB提供程序

4 个解决方案

#1


1  

You need to specify the size.

您需要指定大小。

From CreateParameter Method (ADO)

来自CreateParameter方法(ADO)

If you specify a variable-length data type in the Type argument, you must either pass a Size argument or set the Size property of the Parameter object before appending it to the Parameters collection; otherwise, an error occurs.

如果在Type参数中指定可变长度数据类型,则必须先传递Size参数或设置Parameter对象的Size属性,然后再将其附加到Parameters集合;否则,会发生错误。

cmd.Parameters.Append cmd.CreateParameter("@FID", adVarChar, adParamInput, Len(fid))

cmd.Parameters.Append cmd.CreateParameter(“@ FID”,adVarChar,adParamInput,Len(fid))

#2


0  

Before going any further, the first thing is to confirm if your stored procedure GetFacilityByFID actually returns a Recordset? Most likely it does not. If it only return a single string value, you should modify Function GetFacilityByFID(fid) to something like below:

在继续之前,首先要确认您的存储过程GetFacilityByFID是否实际返回Recordset?很可能它没有。如果它只返回一个字符串值,你应该将Function GetFacilityByFID(fid)修改为如下所示:

Function GetFacilityByFID(fid)
    Set cmd = Server.CreateObject("ADODB.Command")
    Set cmd.ActiveCOnnection= DB
    cmd.CommandText = "GetFacilityByFID"
    cmd.CommandType = adCmdStoredProc
    cmd.Parameters.Append cmd.CreateParameter("@returnVal", adVarChar, adParamOutput, 255, "")
    cmd.Parameters.Append cmd.CreateParameter("@FID", adVarChar, adParamInput)
    cmd("@FID") = fid
    cmd.Execute
    GetFacilityByFID = cmd("@returnVal")
End Function

#3


0  

I rewrote the function using some of the examples I found and some of LankyMart's suggestions. Thanks everyone for your help.

我用我发现的一些例子和LankyMart的一些建议重写了这个函数。谢谢大家的帮助。

Here's the working code...

这是工作代码......

 Function GetFacilityByFID(fid)

    Set rs = server.CreateObject("ADODB.Recordset")
    Set cmd = Server.CreateObject("ADODB.Command")
    Set cmd.ActiveCOnnection= DB
    cmd.CommandText = "GetFacilityByFID"
    cmd.CommandType = adCmdStoredProc
    cmd.CommandTimeout = 900
    set prm = cmd.CreateParameter("@FID",adVarChar, adParamInput, 20, fid)
    cmd.Parameters.Append prm
    rs.CursorLocation = adUseClient
    rs.Open cmd, , adOpenForwardOnly, adLockReadOnly
    Set GetFacilityByFID = rs

On Error GoTo 0   
End Function

#4


-1  

The way you're setting the parameters looks no right, try this instead:

您设置参数的方式看起来不对,请尝试以下方法:

Dim param
Set param = cmd.CreateParameter("@FID", adVarChar, adParamInput)
cmd.Parameters.Append param
param.Value = fid

You can read more here: https://msdn.microsoft.com/pt-br/library/ms675860(v=vs.85).aspx

你可以在这里阅读更多内容:https://msdn.microsoft.com/pt-br/library/ms675860(v = vs。85).aspx

Hope it helps

希望能帮助到你


推荐阅读
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
author-avatar
你好2502898737
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有