Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Clearscript vbscript com ado交互_C#_Vbscript_Clearscript - Fatal编程技术网

C# Clearscript vbscript com ado交互

C# Clearscript vbscript com ado交互,c#,vbscript,clearscript,C#,Vbscript,Clearscript,我使用clearscript作为vbscript执行引擎 我已经公开了以下C对象,我知道它实际上并没有执行查询,我只是暂时测试一下: public class SCB { public ADODB.Recordset executeQuery(string q) { ADODB.Recordset _recordset = new ADODB.Recordset(); _recordset.Fields.Appen

我使用clearscript作为vbscript执行引擎

我已经公开了以下C对象,我知道它实际上并没有执行查询,我只是暂时测试一下:

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主机:

_engine = new VBScriptEngine(WindowsScriptEngineFlags.EnableDebugging);
并将该类添加为具有以下行的对象:

_engine.AddHostObject("SCB", HostItemFlags.GlobalMembers, new SCB());
如果通过以下调用运行某些vbscript代码,则会收到如下所述的错误:

_engine.ExecuteCommand(code);
我正在执行的代码如下所示:

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或大多数有效记录集字段

在将clearscript插入vbscript引擎之前,是否有人可以帮助我解释clearscript对对象所做的操作

谢谢


Rob

检查您是否正在使用嵌入式互操作类型。这一特性对于脚本编写来说是有问题的,因为嵌入的类型中没有托管代码中使用的任何成员

例如,如果在托管代码中不使用EOF,则EOF属性的元数据将从记录集的嵌入版本中删除

在Visual Studio中,尝试将ADODB引用的嵌入互操作类型属性设置为False


另一种尝试是将executeQuery返回类型更改为object,或者添加属性[ScriptMemberFlags.ExposeRuntimeType]。

非常感谢。您的回答详细且绝对正确。我现在面临一个后续问题,即对lRS.MoveFirst的调用失败,并出现“调用失败”的未知绑定错误`代码函数GetUniversalMessage dim lRS、sMessage、sColour、刺激集lRS=SCB。executeQuery选择消息,超时,颜色,从U_SCROLLER启用,其中SCROLLER_ID=1,ENABLED='Y'和DISABLE_TIME为NULL或DISABLE_TIME>GETDATE lRS.MoveFirst End Function未知绑定错误的问题是由于使用了clearscript的NuGet软件包版本,它是版本5.3.11,而不是目前最新的版本5.4.1。更新后,绑定错误得到解决。除了skinny MS FAQ页面外,您是否有其他关于如何从c调用vbscript的资源?如果是这样,请告诉我。如果你愿意,我可以提出一个新问题。谢谢