首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clearscript vbscript com ado交互

Clearscript vbscript com ado交互
EN

Stack Overflow用户
提问于 2015-04-08 00:46:06
回答 1查看 546关注 0票数 0

我使用clearscript作为vbscript执行引擎。

我已经公开了以下C#对象(感谢它实际上没有执行查询,我现在只是在测试):

代码语言:javascript
复制
public class SCB
{
        public ADODB.Recordset executeQuery(string q)
        {
            ADODB.Recordset _recordset = new ADODB.Recordset();

            _recordset.Fields.Append("Id", ADODB.DataTypeEnum.adInteger);
            _recordset.Fields.Append("Name", ADODB.DataTypeEnum.adVarChar, 20);
            _recordset.Open(System.Reflection.Missing.Value
                    , System.Reflection.Missing.Value
                    , ADODB.CursorTypeEnum.adOpenStatic
                    , ADODB.LockTypeEnum.adLockOptimistic, 0);
            _recordset.AddNew(Type.Missing, Type.Missing);
            _recordset.Fields["Name"].Value = "Test";

            return _recordset;
        }
    }
}

我使用以下方法创建了一个vbscript主机:

代码语言:javascript
复制
_engine = new VBScriptEngine(WindowsScriptEngineFlags.EnableDebugging);

并将类添加为对象,并使用以下行:

代码语言:javascript
复制
_engine.AddHostObject("SCB", HostItemFlags.GlobalMembers, new SCB());

如果通过以下调用运行一些vbscript代码,则会收到一个错误(如下所述):

代码语言:javascript
复制
_engine.ExecuteCommand(code);

我正在执行的代码如下:

代码语言:javascript
复制
Function GetUniversalMessage
    dim lRS, sMessage, sColour,sTimeout
    Set Lrs = SCB. executeQuery ("SELECT MESSAGE, TIMEOUT, COLOUR, ENABLED FROM U_SCROLLER WHERE SCROLLER_ID=1 AND ENABLED='Y' AND (DISABLE_TIME IS NULL OR DISABLE_TIME>GETDATE())")
    if not lRS.EOF then
    End If
End Function

我收到一个例外,lrs.eof不是一个有效的字段.但是它对于ado com对象是有效的,如果我在executeQuery中创建的对象返回到脚本引擎之前检查它,就会出现EOF字段。当我通过附加调试器和调用stop命令进行调试时,我可以看到vbscript中的lrs对象不包含EOF或大多数有效的Recordset字段。

在将对象插入vbscript引擎之前,有人能帮助我解释clearscript对对象做了什么吗?

谢谢,

抢夺

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-08 13:10:39

检查是否使用嵌入式互操作类型。这个特性对于脚本来说是有问题的,因为嵌入的类型被去掉了在托管代码中不使用的任何成员。

例如,如果在托管代码中不使用EOF,则EOF属性的元数据将被排除在Recordset的嵌入式版本之外。

在Visual中,尝试将ADODB引用的Embed Interop Types属性设置为False

要尝试的另一件事是将executeQuery返回类型更改为object,或者添加属性[ScriptMember(ScriptMemberFlags.ExposeRuntimeType)]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29503982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档