假設我有簡單C#代碼打印HELLO WORLD如圖in here裝載和從SQL存儲過程
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");
}
}
所以他們在網頁說調用C#(組裝):
本主題概述 名稱空間和庫所需的 編譯數據庫對象使用 Microsoft SQL Server集成 Micro軟.NET Framework通用 語言運行時(CLR)。該主題還介紹瞭如何編寫,編譯和運行使用Microsoft Visual C#編寫的簡單CLR存儲過程 。
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 procedure語句。我們將調用我們的存儲過程「你好」:
CREATE PROCEDURE hello
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld
一旦程序被創建,它可以像寫在Transact-SQL正常的存儲過程運行。執行以下命令:
EXEC hello
要丟棄PROC:
drop procedure hello
一旦程序已被刪除,您可以刪除包含示例代碼的程序集。
drop assembly helloworld
加完後:
我需要使用C++代碼,還使用一個外部的dll,我的問題是下面,
我怎樣使用我的C++代碼(這也使用extern dll)在這個C#裏面,就像這個例子,所以,在創建彙編之後,我執行存儲過程,下面是透明的:
- SQL創建程序集,然後調用dll內的C#代碼。
- C#代碼調用C++代碼(在dll中)
- C++代碼調用extern dll。
所以我只能做
EXEC你好
和所發生的一切(SQL SERVER - > C# - > C++ - > EXTERN DLL)。
- 如何使這一切的dll方去和共存,所以我只執行在SQL Server存儲過程像 EXEC你好
我想在
[DllImport("cCode.dll")]
但如果C++代碼依賴於extern dll ...我迷路了
你最終想做什麼?如果您需要對一組數據執行復雜的邏輯,那麼爲什麼不在應用程序中對從數據庫檢索的一組數據執行該邏輯?保留數據庫以存儲/檢索數據,將業務邏輯放入應用程序中。 – 2011-06-08 00:40:20
這是一個主要的設計失敗。僅僅因爲MS做了這個功能,使用它不是一個好主意。就像直接從aspx頁面調用db一樣。 – 2011-06-08 01:01:45
@adymitruk:我想使用很多的源代碼,並避免重新編碼 – cMinor 2011-06-08 01:13:51