我在PowerBuilder.NET Hello World中 创建了一个函数。从PowerBuilder实用程序以C#生成的项目编译为 Helloworld.dll 。在Helloworld中,我制作了非可视的 n_cst_helloworld 。在非可视内部,我创建了对象函数 of_hello() 。这些是我尝试在SQL Anywhere的外部函数中访问 Helloworld.n_cst_helloworld.of_hello() 时遇到的问题。
外部函数使用 CLR, 并且现在在 Interactive SQL中 被调用。
这是我正在尝试通过ASA在iSQL中启动的脚本:
ALTER PROCEDURE "DBA"."ext_helloworld"() EXTERNAL NAME 'helloworld.dll::Helloworld.n_cst_helloworld.of_hello( )' LANGUAGE CLR
然后,我在iSQL中使用以下内容:
START EXTERNAL ENVIRONMENT CLR; CALL ext_helloworld();
这给了我以下错误:
无法执行语句。过程’ext_helloworld’因未处理的异常’找不到方法’Helloworld.n_cst_helloworld.of_hello’而终止。 SQLCODE = -91
无法执行语句。过程’ext_helloworld’因未处理的异常’找不到方法’Helloworld.n_cst_helloworld.of_hello’而终止。
SQLCODE = -91
因此,我知道我的对象位于正确的文件夹中,并通过REGASM等进行了注册,否则它将给我以前见过的“找不到对象”错误。
我很困惑,因为似乎SQL Anywhere知道对象n_cst_helloworld存在,但是它无法识别使用PowerBuilder.NET实用程序生成的方法。我不知道如何继续通过ASA使用此方法。
目前,我正在使用ASA 12,PB12,PB.NET,并且同时安装了3.5和4.0。
部署.NET项目时,PowerBuilder会将现有或新开发的PowerScript®代码编译到.NET程序集中。
在运行时,生成的.NET程序集使用.NET公共语言运行时(CLR)执行。PowerBuilder的.NET编译器技术与标准PowerBuilder客户端- 服务器应用程序中的P代码编译器一样透明。
部署PowerBuilder运行时文件
将PowerBuilder运行时DLL和.NET程序集部署到生产服务器或目标计算机的最简单方法是使用 PowerBuilder Runtime Packager 工具。运行时打包程序将创建一个MSI文件,该文件将安装您选择的文件,注册所有自注册DLL,然后将.NET程序集安装到全局程序集缓存(GAC)中。
请参阅 完整的文档PB.NET运行时将 这里上的Sybase信息中心
验证生产服务器和目标计算机是否满足运行从PowerBuilder Classic部署的.NET目标的所有要求。
所有.NET目标的清单
为了部署所有.NET目标类型(Windows窗体,Web窗体, .NET程序集 ,.NET Web服务),生产服务器或目标计算机必须具有: