在有需要SQLAnywhere的(16)扩展的访问,其中DB运行在服务器上的一些DOS功能,我想:SQLAnywhere中的“外部CLR”如何访问一个系统进程
第一码的从Sybase调用DLL
________! !SAExternal.vb ____________
Imports System.Diagnostics
Public Class SAExternal
Public Shared Function getDone()
Dim myProcess As Process = System.Diagnostics.Process.Start("notePad.exe", "C:\data\CLR\zTest.txt")
myProcess.WaitForExit()
myProcess.Close()
getDone = "OK"
End Function
End Class
使用编译:
VBC.EXE /吨:图书馆/out:SAExt.dll SAExternal.vb
遵循一些代码来测试我的DLL
_________! SAMain.vb ______________
Module SAMain
Sub Main()
Dim obj as New SAExternal()
MsgBox("Test SAMain " & obj.getDone())
End Sub
End Module
使用编译:VBC.EXE /吨:winexe /r:SAExt.dll SAMain.vb
SAMain.exe正确打开的notepad.exe,等到我关闭它,并附带消息 “测试SAMain OK”
在SQLAnywhere中,我编码:
CREATE FUNCTION getDone()
RETURNS LONG VARCHAR
EXTERNAL NAME 'C:\data\CLR\SAExternal\SAExt.dll::SAExternal.getDone() string'
LANGUAGE CLR
调用FUNC通过“Select getDone()”返回一个错误: “无法加载文件或程序集'System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = ........'或其中一个属性......”
如果我拿出SAExternal模块的过程的一部分:
Public Class SAExternal
Public Shared Function getDone()
getDone = "OK"
End Function
End Class
我的功能给了我正确的答案(‘OK’)
出于测试目的,我所有的阔叶树这些文件与我的数据库文件位于同一目录中,包括.vb和.dll。
我在网上搜索了几天,以了解我做错了什么,并且找不到我错过的东西。
有人能帮助我吗?
的getDone执行前()函数返回一个语法错误接近*出*(或流出)*出*字符串。你确定这个语法在SQLAny 16中是正确的吗?它说:“不正确的参数列表中输入:* out * string not recognized” – karlD