предположим, у меня есть простой C # код для печати HELLO WORLD, как показано здесь
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld()
{
SqlContext.Pipe.Send("HELLO WORLD!\n");
}
}
Так они говорят на этой странице:
В этой теме представлен обзор
пространства имен и библиотеки, необходимые для
компилировать объекты базы данных, используя
Интеграция Microsoft SQL Server с
Microsoft .NET Framework общий
язык выполнения (CLR). Тема также
показывает, как писать, компилировать и
запустить простую хранимую процедуру CLR
написано в Microsoft Visual C #.
Функциональность интеграции CLR
выставлены в сборке под названием
system.data.dll, который является частью
.NET Framework. Эта сборка может быть
находится в глобальном кэше сборок
(GAC), а также в .NET Framework
каталог. Ссылка на это
сборка обычно добавляется
автоматически обеими командными строками
инструменты и Microsoft Visual Studio, так
нет необходимости добавлять его вручную.
После создания (скомпилируя его и добавив в путь к DLL), вы можете использовать этот код в качестве хранимой процедуры, например:
CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE
После того, как сборка была создана, мы теперь можем получить доступ к нашему методу HelloWorld, используя оператор процедуры create. Мы будем называть нашу хранимую процедуру "привет":
CREATE PROCEDURE hello
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
После того, как процедура была создана, ее можно запустить, как обычную хранимую процедуру, написанную на Transact-SQL. Выполните следующую команду:
EXEC hello
Чтобы бросить этот процесс:
drop procedure hello
После удаления процедуры вы можете удалить сборку, содержащую ваш пример кода.
drop assembly helloworld
После этого введения:
Мне нужно использовать код C ++, который также использует extern dll, и мой вопрос следующий,
Как я мог бы использовать мой код C ++ (который также использует extern dll) внутри этого C #, как в примере, поэтому после создания сборки в момент выполнения хранимого процесса следующее будет прозрачным:
- SQL создает сборку и затем вызывает код C # внутри dll.
- C # код вызывает C ++ код (внутри dll)
- Код C ++ вызывает extern dll.
Так что я делаю только
EXEC привет
и все, что происходит (SQL SERVER -> C # -> C ++ -> extern dll).
- Как заставить всю эту dll-вечеринку продолжать и сосуществовать, поэтому я выполняю только хранимый процесс в SQL Server, как
EXEC привет
Я думал в
[DllImport("cCode.dll")]
но если код c ++ зависит от внешней библиотеки dll ... я теряюсь