热门标签 | 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

希望能帮助到你


推荐阅读
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路
    本文介绍了FineReport平台数据分析图表显示部分系列接口的应用场景和实现思路。当图表系列较多时,用户希望可以自己设置哪些系列显示,哪些系列不显示。通过调用FR.Chart.WebUtils.getChart("chartID").getChartWithIndex(chartIndex).setSeriesVisible()接口,可以获取需要显示的系列图表对象,并在表单中显示这些系列。本文以决策报表为例,详细介绍了实现方法,并给出了示例。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • 近期,某用户在重启RAC一个节点的数据库实例时,发现启动速度非常慢。同时业务部门反馈连接RAC存活节点的业务也受影响。通过对日志的分析, ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
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社区 版权所有