标签: vbscript

在VBScript中访问自定义.NET DLL

我在.NET中编写了一个DLL,我想在VBScript中访问它.我不想将它添加到汇编目录中.

有没有办法指出DLL并创建它的实例?

.net dll vbscript dllregistration

6
推荐指数
3
解决办法
2万
查看次数

是否可以从vbscript执行.NET程序集(DLL)?

我想以同步方式从vbscript执行.NET dll文件 - 这可能吗?如果是,是否可以执行GAC程序集?

谢谢,Ofer

.net com dll vbscript assemblies

6
推荐指数
1
解决办法
8495
查看次数

在vbscript中调用C#dll

我试图从QTP调用C#dll(使用vbscript).我尝试了很多没有成功的事情:

  • Visual Studio 2010
  • 创建C#类libary(st.dll)

码:

using System;
using System.Collections.Generic;
using System.Text;   

namespace st
{
    public class Class1
    {
        public static int GetValue()
        {
            return 34;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  • regasm /codebase st.dll
    • 失败'因为它不是有效的.NET程序集'

在QTP/vbscript中,我试过了

  • extern.Declare micInteger, "GetValue", "e:\st.dll", "GetValue"
    • 返回消息:'无效的过程调用或参数'

无论QTP如何,我都非常感谢有关如何从.vbs文件调用c#dll的任何见解.

c# dll vbscript qtp

6
推荐指数
1
解决办法
7456
查看次数

使用VB或python编写OpenOffice Forms脚本

我正在尝试编写我的OpenOffice文档(在我的情况下是Writer)来编写一些简单的小部件.即我想将文本从小部件复制到小部件.为此我想获得一个组件,而不是从中获取文本.

我一直试图这样做:

document   = ThisComponent.CurrentController.Frame

oDocument      =  ThisComponent
oTextBoxFrom = document.getByName("Text Box 1")    # 1
oTextBoxFrom = oDocument.getByName("Text Box 1")   # 2
Run Code Online (Sandbox Code Playgroud)

版本#1和#2都不起作用.VB编译器吐出"文本框1"无法访问,但我的表单中有该组件.我的猜测是我试图从错误的地方获取这个组件,例如.不是它的框架.我只是无法弄清楚文件的结构是什么.

这似乎是一个非常简单的任务,但是我无法找到任何OpenOffice规范,因为从VB或python访问OO UNO对象.

python vbscript scripting openoffice-writer

6
推荐指数
1
解决办法
948
查看次数

有没有办法在vb或vba中的消息框中对齐文本?

有没有办法msgbox在VB或VBA 中将文本对齐到中心?VB有任何功能可以做同样的事情吗?

vb6 vbscript vba messagebox

6
推荐指数
1
解决办法
3万
查看次数

在VBScript中LBound的用途是什么?

据我所知,在VBScript中没有办法创建一个基于1的数组(或任何基于0的数组),但它有一个LBound函数,因此它应该总是返回0.

那么这是从VB返回的某种方式(因为你可以使用"arrayName(1到10)")或者LBound是否可以在VBScript(Classic ASP)中产生0以外的结果?

arrays vbscript asp-classic

6
推荐指数
1
解决办法
1381
查看次数

从经典ASP中删除数组中的元素

给出以下数组作为示例...

arr(0)(0) = 3
arr(0)(1) = name
arr(0)(2) = address
arr(1)(0) = 7
arr(1)(1) = name
arr(1)(2) = address
arr(2)(0) = 14
arr(2)(1) = name
arr(2)(2) = address
Run Code Online (Sandbox Code Playgroud)

我需要从数组中删除中间元素(id = 7).我知道我需要遍历数组并将每个不被删除的记录移动到一个新数组中.我试过这个......

Dim newArr,i
Redim newArr(Ubound(arr))

For i = 0 to Ubound(arr)
    If (CStr(arr(i)(0)) <> 7 ) Then
        newArr(i) = arr(i)
    End if
Next
Run Code Online (Sandbox Code Playgroud)

调试时我可以看到if语句有效,所以我知道只复制了2个元素,但是newArr在结束时是空的.我错过了什么 我是一个PHP编码器,它是经典asp的新手,而且我常常使用数组函数来使这种东西变得不必要.任何帮助赞赏.谢谢.

vbscript asp-classic

6
推荐指数
3
解决办法
2万
查看次数

在旧的经典ASP网站中清理mysql的好方法是什么?

对于电子产品制造商来说,我是一个非常古老,非常大且写得非常糟糕的经典ASP网站的维护者(但幸运的是不是创建者).

安全是一个笑话.这是在将输入放入MySQL口之前清理输入的唯一方法:

Function txtval(data)
    txtval = replace(data,"'","&#39;")
    txtval = trim(txtval)
End Function

productid = txtval(Request.QueryString("id"))
SQL = "SELECT * FROM products WHERE id = " & productid
Set rs = conn.execute(SQL)
Run Code Online (Sandbox Code Playgroud)

因此,该站点不幸(但也许并不奇怪)是SQL注入攻击的受害者,其中一些是成功的.

上面采用的简单方法还不够.也没有使用Server.HTMLEncode.逃避斜线也无济于事,因为攻击非常复杂:

product.asp?id=999999.9+UnIoN+AlL+SeLeCt+0x393133353134353632312e39,0x393133353134353632322e39,0x393133353134353632332e39,0x393133353134353632342e39,0x393133353134353632352e39,0x393133353134353632362e39

上面的url(从访问日志中获取的任意尝试)给出了来自站点的folling响应:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[MySQL][ODBC 5.3(w) Driver][mysqld-5.1.42-community]
The used SELECT statements have a different number of columns

/product.asp, line 14

这意味着注入完成但在这种情况下没有成功获取任何数据.但是其他人也这样做.

该网站由数百个ASP文件组成,其中意大利面条代码总计达数千行而没有太多结构.因此,不能选择参数化查询.这项工作将是巨大的,也容易出错.

但有一件好事是代码中的所有输入参数都一致地通过txtval函数传递,因此通过增加函数可以更好地完成它.此外,由于所有SQL调用都是完成的,conn.execute(SQL)所以用例如搜索和替换它是非常简单的.conn.execute(sanitize(SQL))所以这里也有机会对此做些什么.

鉴于这种情况,我有哪些选择来阻止或至少最小化SQL注入的风险?

任何输入都非常感谢.

更新:

1.我明白参数化查询是处理问题的正确方法.我在创建网站时自己使用它.但考虑到网站的构建方式和大小,它需要1-2个月的时间来修改,测试和调试它.即使这是我们最终的结果(我怀疑),我现在需要做点什么.

2.用html实体替换不是拼写错误.它用其html实体替换单引号.(我没有制作代码!)

3.在上面的具体示例中,使用CInt(id)可以解决问题,但它可以是任何东西,而不仅仅是数字输入.

更新2:

好的,我知道我不是要求正确的解决方案.我从一开始就知道.这就是为什么我写"鉴于情况".

但尽管如此,对于MySQL的关键字,比如过滤输入 …

mysql security vbscript sql-injection asp-classic

6
推荐指数
1
解决办法
773
查看次数

在VBA/VBS中退出while循环

我有一个Excel VBA程序,它循环遍历数据表中的每一行数据.

我的目标是在布尔值bFound设置为时退出while循环True.

我认为我的条件"或bFound = True"可能不正确.

bFound = False
While Sheets("Data").Cells(iRow, 1) <> "" Or bFound = True

    If Sheets("Data").Cells(iRow, 11) = Sheets("Data2").Cells(iRow, 1) Then
        bFound = True
    End If

    iRow = iRow + 1
Wend
'exit loop after the boolean=true
Run Code Online (Sandbox Code Playgroud)

vbscript excel vba excel-vba

6
推荐指数
2
解决办法
2万
查看次数

OLEDB,ODBC,Ntext和Nvarchar(最大)

据我所知,Microsoft在2011年决定弃用OLE DB,并且除了SQL Native Client V11之外不会发生新的驱动程序或维护.将来你应该使用基于ODBC的驱动程序 - http://weblogs.sqlteam.com/dang/archive/2011/09/04/rip-ole-db.aspx

最新的ODBC驱动程序是2016年7月25日发布的"用于SQL Server的Microsoft ODBC驱动程序13" - https://www.microsoft.com/en-us/download/details.aspx?id=50420

Native Client V9,10,11和Microsoft ODBC驱动程序SQL Server V11和13中的ODBC驱动程序都可以在与SQL服务器交互的经典ASP代码中工作(我使用的是SQL 2012),除了一个问题 - nText和Nvarchar(max).

它们只是返回空白 - 我已经看到解决方案说你应该首先读入局部变量而不是直接寻址记录集,例如varStr = rs("LargeText"),但这对我不起作用.还有其他提到使用get chunk等.

但我很高兴使用Native Client V9(Provider = SQLNCLI),它与这些数据类型完美配合.

所以,我的问题是:

有没有让ODBC驱动程序使用nText/Nvarchar(max)数据类型?

在OLEDB上使用ODBC有什么好处吗?

我是否必须在某个阶段升级到ODBC以便将来连接到SQL服务器,即SQL 2014/2016?

换句话说,我可以继续使用OLEDB吗?


好的,Lankymart - 我会用这样的东西:

Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Open "Driver={SQL Server Native Client 11.0};Server=*Yourserver*;Database=*YourDatabase*;User ID=*YourUserid*;Password=*YourPassword*;"   
'oConn.Open "Provider=SQLNCLI11;Server=*YourServer*; Database=*YourDatabase*;User ID=*YourUserID*;Password=*YourPassword*;" 
set view=oConn.Execute("SELECT [PText] FROM [TextTest]")
ttext=view("PText")
response.write(ttext)
view.Close
set view = Nothing
oConn.Close
set oConn = Nothing
Run Code Online (Sandbox Code Playgroud)

其中[PText]是SQL中的NVARCHAR(Max)字段.这不能使用本机客户端ODBC({SQL Server Native Client 11.0}),但将使用OLE DB(SQLNCLI11).

vbscript asp-classic

6
推荐指数
1
解决办法
1415
查看次数