SQL Call dot net Dll
发表时间:2023-09-15 来源:明辉站整理相关软件相关文章人气:
[摘要]软件等级:更新时间:2016-11-11版本号:v5.7.10 MySQL Server x64官方正式版免费下载立即下载 SQL Server 2005 中, 直接叫用.NET組件是個很特別的功能; 它的使用時點在於當 SQL Program 無法快速有效率的處理我們想做的事, 而且...
SQL Server 2005 中, 直接叫用.NET組件是個很特別的功能; 它的使用時點在於當 SQL Program 無法快速有效率的處理我們想做的事, 而且.NET code可以做的比 SQL Program 好時, 我們可以在 SQL Program 中直接叫用 .NET組件中的類別方法, 這些Method必須是static, 這些Method可以被視為Function, Stored Procedure的方式來使用.
以下是一連串的步驟, 說明建立的過程.
1. 標示指定Method
在想要成為CLR Function/Stored Procedure的Static Method上設定Attribute.
1: using System;
2: using System.Collections.Generic;
3: using System.Text;
4:
5: using Microsoft.SqlServer.Server;
6:
7: namespace HowardCLRInSQLSample
8: {
9: public class HelloCLR
10: {
11: [SqlFunctionAttribute(Name = "FN_Hello")]
12: public static string FN_Hello()
13: {
14: return "Hello, CLR Function In SQL !!";
15: }
16:
17: [SqlProcedureAttribute(Name = "SP_Hello")]
18: public static void SP_Hello()
19: {
20: SqlContext.Pipe.Send("Hello, CLR Stored Procedure In SQL !!");
21: }
22: }
23: }
2. SQL Server 環境建立
1: -- 啟用SQL Server中的 CLR功能 (預設為關閉)
2: -- 必須擁有 sysadmin 或 serveradmin 的權限才能啟用此功能
3: sp_configure 'clr enabled', 1
4: GO
5: RECONFIGURE
6: GO
7:
8: -- 同時必須設定指定db - Compatibility level -> 90 (即database為SQL Server 2005)
9: sp_dbcmptlevel OFD_POLARIS_CUR_EC, 90
3. 註冊組件, 建立CLR Function/Stored Procedure
1: -- 登錄組件 HowardCLRInSQLSample.dll
2: -- 任何登錄之後的任何變動(re-build) 皆需重登錄
3: IF EXISTS (SELECT [name] FROM sys.assemblies WHERE [name] = N'HowardCLRInSQLSample')
4: DROP ASSEMBLY HowardCLRInSQLSample;
5: GO
6:
7: CREATE ASSEMBLY HowardCLRInSQLSample
8: FROM 'H:\00 IT\Database\SQL Server\SQL 2005\clr in sql server\HowardCLRInSQLSample\HowardCLRInSQLSample\bin\Debug\HowardCLRInSQLSample.dll'
9: WITH PERMISSION_SET = SAFE;
10: GO
11:
12: -- 可以用assembly_files來檢視組件的路徑
13: select * from sys.assembly_files
14:
15: -- 建立clr function
16: if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FN_Hello]') and xtype in (N'FN', N'IF', N'TF', N'FS'))
17: drop function [dbo].[FN_Hello]
18: GO
19:
20: CREATE FUNCTION [dbo].[FN_Hello] ()
21: Returns nvarchar(100)
22: EXTERNAL NAME HowardCLRInSQLSample.[HowardCLRInSQLSample.HelloCLR].FN_Hello
23:
24:
25: -- 建立clr sp
Alter Database SF_Maintain SET TRUSTWORTHY ON
TRUSTWORTHY { ON OFF }
ON
使用模拟上下文的数据库模块(例如,用户定义函数或存储过程)可以访问数据库以外的资源。
OFF
模拟上下文中的数据库模块不能访问数据库以外的资源。
Alter Database QMS_Stock SET TRUSTWORTHY ON
26: IF EXISTS (SELECT * FROM sys.procedures WHERE [name] = N'SP_Hello')
27: DROP PROCEDURE [dbo].[SP_Hello];
28: GO
29:
30: CREATE PROCEDURE [dbo].[SP_Hello]
31: AS EXTERNAL NAME HowardCLRInSQLSample.[HowardCLRInSQLSample.HelloCLR].SP_Hello
32: GO
4.大功告成. 就如同使用一般function與stored procedure的方式.
1: select [dbo].[FN_Hello]()
2:
3: exec SP_Hello
Configure command
sp_configure 'clr enabled', 1
Go
RECONFIGURE
Go
exec sp_dbcmptlevel SF_Maintain, 90
Alter Database SF_Maintain SET TRUSTWORTHY ON
CREATE ASSEMBLY CLRGetJobStatus
FROM 'd:\QMS_udfudf_GetJobStatus.dll'
WITH PERMISSION_SET = UNSAFE
EXTERNAL NAME [SPSQLDll].[TestSQLDLL.clsFunctionSQL].ufn_VSDll
To get the owner SID recorded in the master database, run:
SELECT owner_sid FROM sys.databases WHERE database_id=DB_ID()
To get the owner SID recorded in the current database, run:
USE SF_Maintain
GO
SELECT sid FROM sys.database_principals WHERE name=N'dbo'
ALTER AUTHORIZATION ON DATABASE::SF_Maintain TO [sa]
常见的网络操作系统有UNIX、Netware、Windows NT、Linux等,网络软件的漏洞及缺陷被利用,使网络遭到入侵和破坏。