Transact-SQL und COM
Erzeugen von COM-Objekten
|
Mit Hilfe der gespeicherten Prozedur sp_OACreate können COM-DLLs instantiiert werden.
Diese Prozedur ist also in etwa das Transact-SQL Pendant zu CreateObject in VBScript.
Als Parameter wird dabei der Name oder die Class-ID (CLSID) der gewünschten Komponenten angegeben.
Als Ausgabeparameter wird ein Handle auf das erzeugte Objekt zurück geliefert.
Konnte das Objekt nicht erfolgreich erzeugt werden, so wird ein RETURN-CODe ungleich 0 zurückgegeben.
Zur Auswertung der Fehlermeldung kann die Prozedur sp_OAGetErrorInfo verwendet werden.
Nach der Verwendung eines COM-Objekts sollte es mit Hilfe der Prozedur sp_OADestroy wieder freigegeben werden.
Diese Prozedur erwartet als Parameter den Objekthandle.
|
|
sp_OACreate
Syntax:
EXEC @hr = master.dbo.sp_OACreate prog-identifier|clsid, @objekt OUTPUT
Zusätzlich kann als weiterer Parameter noch festgelegt werden, ob die Komponenten In- oder Out-of
Process erstellt werden soll. Wird dieser Parameter weggelassen, so wird die Komponente nach Möglichkeit
In-Process erstellt.
Parameter:
sp_OADestroy
Syntax:
EXEC @hr = master.dbo.sp_OADestroy @objekt
Zusätzlich kann als weiterer Parameter noch festgelegt werden, ob die Komponenten In- oder Out-of
Process erstellt werden soll. Wird dieser Parameter weggelassen, so wird die Komponente nach Möglichkeit
In-Process erstellt.
Parameter:
Beispiele zur Objekterstellung und -zerstörung
Erstellen eines DMO.SQLServer Objekts
-- DMO.SQLServer -- DECLARE @hr int DECLARE @sqlserver int -- Instanziieren eines SQLServer Objekts: EXEC @hr = master.dbo.sp_OACreate 'SQLDMO.SQLServer', @sqlserver OUTPUT IF @hr = 0 PRINT 'SQLServer Objekt erzeugt.' ELSE PRINT 'Fehler beim Erstellen eines SQLDMO.SQLServer Objekts' -- Objekt wieder freigeben: EXEC @hr = master.dbo.sp_OADestroy @sqlserver PRINT @hr GO
Erstellen eines ADO.Connection Objekts
-- ADO.Connection -- DECLARE @hr int DECLARE @verbindung int -- ADODB.Connection Objekt instantiieren EXEC @hr = master.dbo.sp_OACreate 'ADODB.Connection', @verbindung OUTPUT IF @hr = 0 PRINT 'ADODB.Connection Objekt erzeugt.' ELSE PRINT 'Fehler beim Erstellen des ADODB.Connection Objekts' -- Objekt wieder freigeben EXEC @hr = master.dbo.sp_OADestroy @verbindung PRINT @hr GO
Erstellen eines ADOX.Catalog Objekts
-- ADOX.Catalog -- DECLARE @hr int DECLARE @katalog int -- Instantiieren eines ADOX.Catalog Objekts EXEC @hr = master.dbo.sp_OACreate 'ADOX.Catalog', @katalog OUTPUT IF @hr = 0 PRINT 'ADOX.Catalog Objekt erzeugt.' ELSE PRINT 'Fehler beim Erzeugen eines ADOX.Catalog Objekts' -- Objekt wieder freigeben EXEC @hr = master.dbo.sp_OADestroy @katalog PRINT @hr GO
Erstellen eines Scripting.FileSystemObjekts
-- Scripting.FilesystemObject -- DECLARE @hr int DECLARE @fso int -- Erzeugen eines Scripting.Filesystem Objekts EXEC @hr = master.dbo.sp_OACreate 'Scripting.FilesystemObject', @fso OUTPUT IF @hr = 0 PRINT 'Scripting.FilesystemObject erzeugt.' ELSE PRINT 'Fehler beim Erzeugen des Scripting.Filesystemobjekts' -- Objekt wieder freigeben EXEC @hr = master.dbo.sp_OADestroy @fso PRINT @hr GO
Erstellen eines Wscript.Shell Objekts
-- Scriptinghost Shell DECLARE @hr int DECLARE @wsShell int -- Erzeugen eines Wscript.Shell Objekts EXEC @hr = master.dbo.sp_OACreate 'WScript.Shell', @wsShell OUTPUT IF @hr = 0 PRINT 'Wscript.Shell Objekt erstellt.' ELSE PRINT 'Fehler beim Erzeugen eines WScript.Shell Objekts.' -- Objekt wieder freigeben EXEC @hr = master.dbo.sp_OADestroy @wsShell PRINT @hr GO
Erstellen eines DTS.Paket Objekts
-- DTS.Package -- DECLARE @hr int DECLARE @paket int -- DTS.Paket Objekt erzeugen: EXEC @hr = master.dbo.sp_OACreate 'DTS.Package', @paket OUTPUT IF @hr = 0 PRINT 'DTS.Paket Objekt erzeugt.' ELSE PRINT 'Fehler beim Erzeugen eines DTS.Paket Objekts.' -- Objektvariable freigeben EXEC @hr = master.dbo.sp_OADestroy @paket PRINT @hr GO
Erstellen eines VBS RegularExpression Objekts
-- VBScript.RegularExpression -- DECLARE @hr int DECLARE @regExp int -- Erzeugen eines regulären Ausdrucks EXEC @hr = master.dbo.sp_OACreate 'VBScript.RegExp', @regExp OUTPUT IF @hr = 0 PRINT 'VBScript Regular Expression erzeugt' ELSE PRINT 'VBScript Regular Expression konnte nicht erzeugt werden.' -- Objekt freigeben EXEC @hr = master.dbo.sp_OADestroy @regExp PRINT @hr GO
|