Цель:Выполнение VB.NET DLL из SQL Server
мы хотим написать DLL с использованием VB.NET 2008 с использованием .Net 3.5, который выполняет запрос HTTP
мы тогда хотим вызвать DLL From SQL Server 2005 (в триггере) и передать DLL некоторые переменные и получить возвращаемое значение.
Куда im в процессе.
Я создал DLL 'HTTPDLL.dll'
Источник:
Imports System
Imports System.Configuration
Imports System.Collections.Generic
Imports System.Text
Imports System.Net
Imports System.Security
Imports System.Security.Permissions
Imports System.IO
Imports Microsoft.SqlServer.Server
Public Class HTTPDLL
Public Function HTTPPost(ByVal URL As String, ByVal Content As String) As Boolean
Dim myURL As String = Trim(URL)
Dim mycontent As String = Trim(Content)
Dim rawOutput As String = ""
'Get Acces Right to web
Dim p As New WebPermission(NetworkAccess.Connect, myURL)
p.Assert()
'Prepare the web Request
Dim req As WebRequest = WebRequest.Create(myURL)
req.Timeout = 60000
req.Method = "POST"
req.ContentLength = mycontent.Length
req.ContentType = "application/x-www-form-urlencoded"
Dim sw As New StreamWriter(req.GetRequestStream())
sw.Write(mycontent)
sw.Close()
Dim resp As WebResponse = req.GetResponse()
Dim sr As New StreamReader(resp.GetResponseStream)
rawOutput = sr.ReadToEnd()
sr.Close()
Return True
End Function
Public Function Test() As Integer
Return 1
End Function
Public Function DllMain(ByVal hInst As Long, ByVal fdwReason As Long, _
ByVal lpvReserved As Long) As Boolean
Dim s As String = "sdfghjkolihdgjkhgiueghkyhekygigdjhgfkhsgdkhfgksjdhgkjshdgfkjhsgdkjfhgkshdgfkjhgskjdhgfkjhsdgkfhgskjdhfgkjsdhgfkshdgfkhgsdkfhgksdhfgkshdgfkshdgfkjhsgdkfhgskdhfgksjdhgfkjshgdfkhsgdkfhgskdhfgkshgdfkjhgskdjg"
s &= "kjhdgjkshkdjfhklsjdhfljhgkhvbfiuvbli klrfgliu ghliebliuhdflivbdkljhgljuhfvliuhdf"
Return True
End Function
End Class
Я поставил DLL в SQL Server C:/Windows/папка System
Я загруженную эти сборки
HelloWorld System.Core System.Xml.Linq
с помощью этих команд
EXEC sp_configure 'show advanced options' , '1';
go
reconfigure
go
EXEC sp_configure 'clr enabled' , '1'
go
sp_configure 'Ole Automation Procedures', '1'
GO
RECONFIGURE
-- Turn advanced options back off
EXEC sp_configure 'show advanced options' , '0';
go
reconfigure
GO
-- assembly style
ALTER DATABASE master SET TRUSTWORTHY ON
GO
CREATE ASSEMBLY [System.Core]
AUTHORIZATION [dbo]
FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
WITH PERMISSION_SET = UNSAFE
GO
CREATE ASSEMBLY [System.Xml.Linq]
AUTHORIZATION [dbo]
FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll'
WITH PERMISSION_SET = UNSAFE
GO
create assembly HelloWorld from 'C:\WINDOWS\system\HTTPDLL.dll'
with permission_set = safe
GO
Я тогда Добавлена Расширенная процедура
USE [master]
GO
/****** Object: ExtendedStoredProcedure [dbo].[HTTPDLL] Script Date: 02/03/2010 11:45:28 ******/
EXEC dbo.sp_addextendedproc N'HTTPDLL', 'C:\WINDOWS\system\HTTPDLL.dll'
(на данный момент им не уверен, почему, или если мне нужно, чтобы добавить сборку, так как это ссылается на Dll непосредственно.)
Что мне нужно решить. Теперь я хочу вызвать DLL (расширенная процедура) HttpPost Функция
То, что я Пытался Exec HttpPost «Msg 17750, уровень 16, состояние 0, процедуры HttpPost, Line 1 Не удалось загрузить DLL HelloWorld, или одна из библиотек DLL, на которые ссылается. Причина: 126 (Указанный модуль не найден.). "
exec HelloWorld.HTTPPost 'http://www.somewebsite.com',''
"Msg 2812, уровень 16, состояние 62, строка 1 не удалось найти хранимую процедуру 'HelloWorld.HTTPPost'."
Что мне нужно: Если вы можете посмотреть мою экспломатацию и посмотреть, правильно ли я настроил все правильно, а также рассказать мне (с примерами), как правильно вызвать эту DLL, посылая ее переменные и перехватив ее возвращаемое значение , Я буду очень благодарен.
Я просмотрел МНОГИЕ сообщения/статьи и получил кусочки и кусочки, которые взяли меня так далеко, но ничего не было все включено.
Я также попытался это
-- Scratch variables used in the script
DECLARE @retVal INT
DECLARE @comHandle INT
DECLARE @errorSource VARCHAR(8000)
DECLARE @errorDescription VARCHAR(8000)
DECLARE @retString VARCHAR(100)
-- Initialize the COM component.
EXEC @retVal = sp_OACreate 'HTTPDLL.HTTPDLL', @comHandle OUTPUT
IF (@retVal <> 0)
BEGIN
-- Trap errors if any
EXEC sp_OAGetErrorInfo @comHandle, @errorSource OUTPUT, @errorDescription OUTPUT
SELECT [Error Source] = @errorSource, [Description] = @errorDescription
RETURN
END
(и другие подобные варианты) и получить это возвращение sp_OAGetErrorInfo
«Ошибка Источник Описание ODSOLE Расширенная процедура Неверная строка класса»
Возможно, я вызываю это неправильно, но я havent смог заставить его работать (всегда возвращать «недопустимую строку класса»)
Заранее благодарю вас за помощь !.