Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, .NET Framework ortak dil çalışma zamanı (CLR) ile SQL Server tümleştirmesini kullanarak veritabanı nesnelerini derlemek için gereken ad alanları ve kitaplıklara genel bir bakış sağlanmaktadır. Makalede ayrıca C# ve Visual Basic .NET'te yazılmış küçük bir CLR saklı yordamını yazma, derleme ve çalıştırma işlemleri de gösterilir.
Gerekli ad alanları
Temel CLR veritabanı nesneleri geliştirmek için gereken bileşenler SQL Server ile yüklenir. CLR tümleştirme işlevselliği, .NET Framework'ün bir parçası olan System.Data.dlladlı bir derlemede kullanıma sunulur. Bu derleme Genel Derleme Önbelleği'nde (GAC) ve .NET Framework dizininde bulunabilir. Genellikle, bu derlemeye yapılan bir başvuru hem komut satırı araçları hem de Visual Studio tarafından otomatik olarak eklenir, bu nedenle el ile eklemeniz gerekmez.
System.Data.dll derlemesi, CLR veritabanı nesnelerini derlemek için gereken aşağıdaki ad alanlarını içerir:
System.DataSystem.Data.SqlMicrosoft.SqlServer.ServerSystem.Data.SqlTypes
Bahşiş
Linux'ta CLR veritabanı nesnelerinin yüklenmesi desteklenir, ancak .NET Framework ile derlenmeleri gerekir (SQL Server CLR tümleştirmesi .NET Core veya .NET 5 ve sonraki sürümleri desteklemez). Ayrıca, EXTERNAL_ACCESS veya UNSAFE izin kümesine sahip CLR derlemeleri Linux'ta desteklenmez.
"Merhaba Dünya" saklı yordamı yazın
Aşağıdaki C# veya Visual Basic .NET kodunu kopyalayıp bir metin düzenleyicisine yapıştırın ve helloworld.cs veya helloworld.vbadlı bir dosyaya kaydedin.
using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
public class HelloWorldProc
{
[Microsoft.SqlServer.Server.SqlProcedure]
public static void HelloWorld(out string text)
{
SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
text = "Hello world!";
}
}
Bu program, ortak bir sınıfta tek bir statik yöntem içerir. Bu yöntem, kısa bir metin iletisi çıktısı almak üzere yönetilen veritabanı nesneleri oluşturmak için SqlContext out parametresinin değeri olarak "Hello world!" dizesini atar. Bu yöntem SQL Server'da saklı yordam olarak bildirilebilir ve ardından Transact-SQL saklı yordamıyla aynı şekilde çalıştırılabilir.
Bu programı kitaplık olarak derleyin, SQL Server'a yükleyin ve saklı yordam olarak çalıştırın.
"Hello World" saklı yordamını derleme
SQL Server varsayılan olarak .NET Framework yeniden dağıtım dosyalarını yükler. Bu dosyalar csc.exe ve vbc.exe, C# ve Visual Basic .NET programları için komut satırı derleyicilerini içerir. Örneğimizi derlemek için yol değişkeninizi csc.exe veya vbc.exeiçeren dizine işaret eden şekilde değiştirmeniz gerekir. Aşağıdaki yol, .NET Framework'ün varsayılan yükleme yoludur.
C:\Windows\Microsoft.NET\Framework\(version)
Sürüm, yüklü .NET Framework'ün sürüm numarasını içerir. Mesela:
C:\Windows\Microsoft.NET\Framework\v4.8.0
.NET Framework dizinini yolunuza ekledikten sonra, aşağıdaki komutla örnek depolanmış yordamı bir derlemeye dönüştürebilirsiniz.
/target seçeneği bunu bir derlemede derlemenize olanak tanır.
C# kaynak dosyaları için:
csc /target:library helloworld.cs
Visual Basic .NET kaynak dosyaları için:
vbc /target:library helloworld.vb
Bu komutlar, kitaplık DLL'si oluşturmayı belirtmek için /target seçeneğini kullanarak C# veya Visual Basic .NET derleyicisini başlatır.
SQL Server'da "Hello World" saklı yordamını yükleme ve çalıştırma
Örnek yordam başarıyla derlendiğinde SQL Server'da test edebilirsiniz. Bunu yapmak için SQL Server Management Studio'yu açın ve uygun bir test veritabanına (örneğin, AdventureWorks2025 örnek veritabanı) bağlanarak yeni bir sorgu oluşturun.
Ortak dil çalışma zamanı (CLR) kodu yürütme özelliği SQL Server'da varsayılan olarak OFF olarak ayarlanır. CLR kodu, sp_configure sistem saklı yordamı kullanılarak etkinleştirilebilir. Daha fazla bilgi için bkz. CLR tümleştirmesini etkinleştirme
Saklı yordama erişebilmek için derlemeyi oluşturmamız gerekir. Bu örnekte, helloworld.dll dizininde C:\ derlemesini oluşturduğunuz varsayılır. Sorgunuza aşağıdaki Transact-SQL deyimini ekleyin.
CREATE ASSEMBLY helloworld from 'C:\helloworld.dll' WITH PERMISSION_SET = SAFE
Derleme oluşturulduktan sonra artık CREATE PROCEDURE deyimini kullanarak HelloWorld yöntemimize erişebiliriz. Saklı prosedürümüzü helloolarak adlandırıyoruz:
CREATE PROCEDURE hello
(@i NCHAR (25) OUTPUT)
AS EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld;
Not
Önceki örnekte, HelloWorldProc sınıfı bir ad alanı içindeyse (MyNSolarak adlandırılır), create yordam deyimindeki son satır EXTERNAL NAME helloworld.[MyNS.HelloWorldProc].HelloWorld;olacaktır.
Yordam oluşturulduktan sonra, Transact-SQL'de yazılmış normal bir saklı yordam gibi çalıştırılabilir. Aşağıdaki komutu yürütür:
DECLARE @J AS NCHAR (25);
EXECUTE hello @J OUTPUT;
PRINT @J;
İşte beklenen çıktı.
Hello world!
Hello world!
"Hello World" saklı yordam örneğini kaldırma
Örnek saklı yordamı çalıştırmayı bitirdiğinizde, yordamı ve derlemeyi test veritabanınızdan kaldırabilirsiniz.
İlk olarak, drop procedure komutunu kullanarak yordamı kaldırın.
IF EXISTS (SELECT name
FROM sysobjects
WHERE name = 'hello')
DROP PROCEDURE hello;
Prosedür sonlandırıldıktan sonra, örnek kodunuzu içeren derlemeyi kaldırabilirsiniz.
IF EXISTS (SELECT name
FROM sys.assemblies
WHERE name = 'helloworld')
DROP ASSEMBLY helloworld;
İlgili içerik
- CLR saklı yordamlarını
- SQL Server'da ADO.NET için işlem içi özel uzantılar
- CLR veritabanı nesne hatalarını ayıklama
- CLR tümleştirme güvenliği