我曾经stop在我的VBScript/ASP-Classic代码中添加一个" "语句来打入调试器(Microsoft脚本编辑器,Microsoft Office附带).
但现在它不再破坏了." stop"被忽略,没有任何好处.
IIS中已启用服务器端调试标志
怎么解决这个?
示例代码, hello.asp
stop
Response.Write "Hello W."
Run Code Online (Sandbox Code Playgroud) 由于数值超过了VBScript INT可以存储的值,我收到了一个非常讨厌的错误消息(实际上是用户)...这完全是twitpocalypse的情况.
由于CINT()在这种情况下不起作用,最好的解决方法是什么?
requestqty = 40200
CInt() max = 32767
CInt(requestqty)
Run Code Online (Sandbox Code Playgroud)
编辑
CLng()似乎可以解决问题,将代码更改为所有CInt()到CLng()的任何风险.从我在下面阅读的内容和其他网站上看,似乎甚至没有理由使用CInt().我没有写这个特定的应用程序,也不知道为什么一个被用于另一个,但更愿意不对这个问题进行限制并在应用程序中完全解决这个问题,所以它不会再发生......
出于一些奇妙的原因,我发现自己在经典ASP页面中调试了一个问题(在过去的两天里我至少失去了10年的生命).
我正在尝试执行包含一些OUT参数的存储过程.问题是当存储过程返回时,没有填充其中一个OUT参数.我可以从SQL管理工作室(这是2008)执行存储过程,并且所有值都被设置并完全按预期返回.
declare @inVar1 varchar(255)
declare @inVar2 varchar(255)
declare @outVar1 varchar(255)
declare @outVar2 varchar(255)
SET @inVar2 = 'someValue'
exec theStoredProc @inVar1 , @inVar2 , @outVar1 OUT, @outVar2 OUT
print '@outVar1=' + @outVar1
print '@outVar2=' + @outVar2
Run Code Online (Sandbox Code Playgroud)
效果很好.太棒了.完善.我期待的确切值将被返回并打印出来.
是的,因为我正在尝试调试经典ASP页面,所以我将代码复制到VBScript文件中以尝试缩小问题范围.
这是我想出的:
Set Conn = CreateObject("ADODB.Connection")
Conn.Open "xxx"
Set objCommandSec = CreateObject("ADODB.Command")
objCommandSec.ActiveConnection = Conn
objCommandSec.CommandType = 4
objCommandSec.CommandText = "theStoredProc "
objCommandSec.Parameters.Refresh
objCommandSec.Parameters(2) = "someValue"
objCommandSec.Execute
MsgBox(objCommandSec.Parameters(3))
Run Code Online (Sandbox Code Playgroud)
不行.一点儿都没有.(我生命中的另外十年)第三个参数只是NULL - 这也是我在Classic ASP页面中遇到的.
有人可以对此有所了解吗?我认为经典的ASP代码与VBScript代码相同,我是完全愚蠢的吗?我认为它使用相同的脚本引擎和语法,所以我应该没问题,但我不是100%肯定.
我从VBScript中看到的结果与我在ASP中看到的结果相同.
我在web.config中有以下内容
<httpErrors errorMode="Custom">
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="500" prefixLanguageFilePath="" path="/error.asp" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
错误处理正在工作,当发生500错误时,我被发送到my error.asp而不是默认的500错误页面.
问题是没有设置ASPError返回的对象的任何属性Server.GetLastError.
例如,在下面的代码中,错误描述是
dim oErr : set oErr = Server.GetLastError
Response.Write "Error Description: " & oErr.Description& "<br />"
Run Code Online (Sandbox Code Playgroud)
基于Joel在评论中链接的主题,我已将web.config更新为以下内容:
<httpErrors errorMode="Custom">
<remove statusCode="500" subStatusCode="100" />
<error statusCode="500" subStatusCode="100" prefixLanguageFilePath="" path="/error.asp" responseMode="ExecuteURL" />
</httpErrors>
Run Code Online (Sandbox Code Playgroud)
这确实给了我返回的ASPError对象中的数据GetLastError.
现在的问题是我从生成错误的页面的开头获取HTML,然后页面的其余部分是HTML error.asp.
我真的很喜欢重定向到error.asp但改变web.config responseMode="Redirect"似乎不起作用.
而不是像这样的代码:
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_IP4RouteTable",,48)
For Each objItem in colItems
Wscript.Echo "Age: " & objItem.Age
Wscript.Echo "Caption: " & objItem.Caption
Wscript.Echo "Description: " & objItem.Description
Next
Run Code Online (Sandbox Code Playgroud)
是否可以按名称访问每个属性,类似于以下语法之一:
Wscript.Echo "Age: " & objItem("Age")
Wscript.Echo "Age: " & objItem.Properties("Age")
Wscript.Echo "Age: " & objItem.Item("Age")
Run Code Online (Sandbox Code Playgroud)
甚至更好,有什么办法可以做到这样的事情:
Dim colItems
Dim objItem
Dim aProperty
Set colItems = objWMIService.ExecQuery("Select * from Win32_IP4RouteTable",,48)
For Each objItem in colItems
For …Run Code Online (Sandbox Code Playgroud) 假设我在VBScript中创建了一个动态数组
Dim myArray()
Run Code Online (Sandbox Code Playgroud)
稍后我如何检查这个数组从未被标注过尺寸?
Ubound(myArray) 'sub script out of range
Lbound(myArray) 'sub script out of range
IsEmpty(myArray) 'returns false
Run Code Online (Sandbox Code Playgroud) 我喜欢脚本,我不喜欢重新发明轮子,所以我喜欢CreateObject
你能不能指出一个可以在VBScript上使用的简短描述的对象列表.真的,我没有找到超过50的网站.
提前致谢
在VBScript中,是否FormatDateTime有ISO 8601支持?
如果没有,我将如何编写这样的功能呢?
例如:
Response.Write FormatAsISO8601(#05/04/2011#)
Function FormatAsISO8601(datetime)
...
End Function
Run Code Online (Sandbox Code Playgroud) 我正在尝试从vbs查询SQL数据库,但是当没有找到记录时,我收到错误
ADODB.Field:BOF或EOF为True,或者当前记录已被删除.请求的操作需要当前记录.
我想我需要使用IF NOT语句来捕获是否找不到记录,但我无法弄清楚它需要去哪里.
Do Until objFile.AtEndofStream
strAppName = objFile.ReadLine
ConnString="DRIVER={SQL Server};SERVER=aardvark002;UID=***;PWD=***;DATABASE=DEW_Users"
SQL = "USE Win7AppData SELECT " & Chr(34) & strCountry & Chr(34) & " FROM AppsByCountry WHERE Application = '" & strAppName & "'"
Set Connection = CreateObject("ADODB.Connection")
Set Recordset = CreateObject("ADODB.Recordset")
Connection.Open ConnString
Recordset.Open SQL,Connection
strApproval = Recordset(strCountry)
If StrApproval = "YES" Then
strApproval = "Approved"
Else
strApproval = "Denied"
End If
objExcel.Cells(intRow, 1).Value = strAppname
objExcel.Cells(intRow, 2).Value = strCountry
objExcel.Cells(intRow, 3).Value = strApproval
intRow = intRow …Run Code Online (Sandbox Code Playgroud) 我有以下asp-classic代码,它将3个变量附加到XML文档中,'location_x','location_y'和'date_and_time'.
ASP-Classic代码 - 创建或附加现有XML文档.
Function LoadObjecttoXML(strXMLFilePath, strFileName)
Dim objDom
Dim objGpx
Dim objWpt
Dim objRte
Dim objRtept
Dim objDateTime
Dim objattLat
Dim objattLon
Dim objPI
Dim blnFileExists
'Instantiate the Microsoft XMLDOM
Set objDom = server.CreateObject("Microsoft.XMLDOM")
objDom.preserveWhiteSpace = True
blnFileExists = objDom.Load(strXMLFilePath & "\" & strFileName)
If blnFileExists = True Then
Set objGpx = objDom.documentElement
Else
'GPX root element and append it to the XML document.
Set objGpx = objDom.createElement("gpx")
objDom.appendChild objGpx
End If
Set objWpt = objDom.createElement("wpt")
'Create "Lat" attribute' …Run Code Online (Sandbox Code Playgroud)