2016-04-02 11 views
0

in der Notwendigkeit einer Erweiterung in SQLAnywhere (16) einige DOS-Funktionen auf dem Server zuzugreifen, wo die DB läuft, habe ich versucht:Wie kann SQLAnywhere die „externe CLR“ Zugriff auf einen Systemprozess

Ein erster Code für eine DLL, die von Sybase aufgerufen werden soll

________! ! 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 

mit kompiliert:
vbc.exe/t: library /out:SAExt.dll SAExternal.vb

Folgt einige Code meine DLL

zu testen

_________! SAMain.vb ______________

Module SAMain 

    Sub Main() 
     Dim obj as New SAExternal() 

     MsgBox("Test SAMain " & obj.getDone()) 
    End Sub 

End Module 

zusammengestellt mit: vbc.exe/t: winexe /r:SAExt.dll SAMain.vb

SAMain.exe richtig notepad.exe öffnet, wartet, bis ich schließen und kommt mit der Meldung "Test SAMAIN OK"

In SQLAnywhere, ich codiert:

CREATE FUNCTION getDone() 
RETURNS LONG VARCHAR 
EXTERNAL NAME 'C:\data\CLR\SAExternal\SAExt.dll::SAExternal.getDone() string' 
LANGUAGE CLR 

aufrufen func Wenn Sie "Select getDone()" auswählen, wird ein Fehler zurückgegeben: "Laden der Datei oder Assembly, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = ........" oder einer der zugehörigen Komponenten nicht möglich ...“

Wenn ich den Prozess Teil des SAExternal Modul herausnehmen:

Public Class SAExternal 
    Public Shared Function getDone() 
     getDone = "OK" 
    End Function 
End Class 

meine Funktion gibt mir die richtige Antwort (‚OK‘)

Für Testzwecke Endivie ich alle Diese Dateien befinden sich im selben Verzeichnis wie meine Datenbankdatei, einschließlich .vb und .dll.

Ich habe das Web seit Tagen durchsucht, um zu verstehen, was ich falsch gemacht habe, und kann nicht finden, was ich verpasst habe.

Kann mir jemand helfen?

Antwort

0

versuchen

CREATE FUNCTION getDone() RETURNS LONG VARCHAR 
EXTERNAL NAME 'C:\data\CLR\SAExternal\SAExt.dll::SAExternal.getDone() *out* string' 
LANGUAGE CLR 

Bitte beachten Sie, das Hinzufügen der Out-Option vor Zeichenfolge

+0

die Ausführung der getDone() Funktion gibt einen Syntaxfehler in der Nähe von * out * (oder aus) von * out * string . Sind Sie sicher, dass diese Syntax in SQLAny 16 korrekt ist? Es heißt: "Falscher Typ in Parameterliste: * out * String nicht erkannt" – karlD