|
CLR Destekli Stored Procedure Yazmak
|
|
01-09-2008, 09:29 PM
Mesaj: #1
|
|||
|
|||
|
CLR Destekli Stored Procedure Yazmak
Biliyorsunuzki SQL Server 2005 ve Visual Studio 2005 geliyor, Microsoft 6 Kasımda bu iki ürünüde piyasaya çıkartacak ve yepyeni özellikler, hayatımızı kolaylaştıracak çok fazla işlevsel özellikleri bulacağız, bu yeniliklerin en önemlilerinden bir taneside SQL Server da olacak, SQL Server artık CLR destekli (yani Vb.Net yada C# kodlarını) çalıştırabiliyor olacak. Bu makalenin amacı ise bu işin beta larda nasıl yapılacağını anlamak. Benim kullandığım platform, SQL Server 2005 CTP (SQL Server 9.0.1116) ve Visual Studio 2005 Beta 2. önceki sürümlere göre bazı değişiklikleri var özellikle yeni eklenmiş olan Context Connection=true deyimi mevcut. Bu deyim vasıtası ile yazdığımız Stored Procedure ler biraz daha Ado.Net yapısına benzetilmiş durumda, önceden Stored Procedure yi yazmak için sürekli SqlContext nesnesini kullanmak zorunda kalıyorduk (örneğin Dim conn as SqlConnection = SqlContext.GetConnection() gibi) daha farklıydı, ancak artık dahada kolaylaştırılmış durumda.
Hemen örneğimize geçelim, örneğimizde Vb.Net ile Stored Procedure ler yazacağız, ancak nasıl ? biliyorsunuzki, örneğin bir Windows uygulaması yaratmak istiyorsanız, Windows Application Template ini kullanıyoruz, yada Asp.Net uygulaması kullanacaksak, Asp.Net Web Site Template ini kullanıyoruz, Visual Studio 2005 ilede yeni bir Template geliyor, SQL Server Project, bu Template bize gerekli NameSpaceleri getiriyor, ve Stored Procedure ü daha rahat yazmamız sağlıyor. Visual Studio 2005 imizi açıp, Create Project diyoruz daha sonra Visual Basic altından Database i oradanda uygulama tipi olarak SQL Server Project i seçiyoruz ve isim olarakta YazGelistirOrnek giriyoruz, Tamam a bastığımızda karşımıza Add Database Reference ekranı geliyor, bu ekranda hangi veri kaynağına bağlanmak istediğimiz soruluyor, seçebiliriz yada seçmeyebiliriz çok önemli değil (nedenini bu makalenin ikinci bölümünde bulabilirsiniz.) şimdilik bir tane seçelim, AdventureWorks veri tabanına bağlanabilirsiniz. Bir Veritabanını seçtikten sonra karşınıza bir soru geliyor, bu soru sizin CLR destekli yazdığınız Stored Procedure nin Debug yeteneğinin olması için bunu aktifleştirmeniz gerektiğini söylüyor, eğer aktifleştirmezseniz Makalenin ikinci bölümünde bir script bloğunu kullanmanız gerekiyor. Biz şimdilik aktifleştirmesini isteyelim ve Yes e basalım. ![]() Bize bir Test.sql ve AssemblyInfo.vb dosyalarımızı ekledi. Ancak gördüğünüz gibi Stored Procedure yi yazacağım bir dosya yok, bunun için bir Stored Procedure eklemeliyim, Projeye sağ tuş, Add ve Stored Procedure yi seçin. İsmine GetPersonAddressType yazın ve Add e tıklayın. Karşınıza şöyle bir şablon çıkacak Imports System Imports System.Data Imports System.Data.Sql Imports System.Data.SqlTypes Imports Microsoft.SqlServer.Server Partial Public Class StoredProcedures _ Public Shared Sub GetPersonAddressType () Add your code here End Sub End Class Buradaki kodu bir inceleyelim, öncelikle kullandığımız NameSpacelere bakalım, System ve System.Data bildiğiniz gibi standart, System.Data.Sql çok önemli değil, System.Data.SqlTypes bizim Sql Server da kullanacağımız veri türlerini örneğin, SqlString (nvarchar ımızın yerini tutuyor), SqlInt32 gibi, Microsoft.SqlServer.Server da ise Sql Server a özel class lar mevcut, örneğin metodudun Attribute ına bakarsanız o namespace den gelme. Şimdi metodumuzu inceleyelim, metodumuz shared tanımlı, eğer Stored Procedure yazmak istiyorsanız Shared olması gerekiyor. Bunun dışında SqlProcdure olarak metodun imzalanmasından başka bir ekstralık yok. Şimdi amacımız AdventureWorks veritabanındaki, Person shemasındaki AddressType tablosunun tümünü alabilmek, bunun için aşağıdaki kodu yazın. Görüceksiniz ki çok kolay. Imports System Imports System.Data Imports System.Data.Sql Imports System.Data.SqlTypes Imports Microsoft.SqlServer.Server Imports System.Data.SqlClient Partial Public Class StoredProcedures _ Public Shared Sub GetPersonAddressType() Dim conn As SqlConnection = New SqlConnection conn.ConnectionString = "Context Connection=true" Dim comm As SqlCommand = New SqlCommand comm.CommandText = "SELECT * FROM Person.AddressType" comm.Connection = conn Dim sp As SqlPipe = SqlContext.Pipe conn.Open() sp.Send(comm.ExecuteReader) conn.Close() End Sub End Class Yukarıdaki kodu hızlıca inceleyelim, ilk olarak System.Data.SqlClient Namespace ini ekledim, ki böylece SqlConnection, SqlCommand tazrındaki yapıları kullanabileyim. Daha sonra bir SqlConnection tanımladım, ancak ConnectionString ine sadece “Context Connection=true” yu ekledim, böylece SQL server kendi içindeki Connectionlardan kullanması gerektiğini anlayacak, daha sonra bir SqlCommand ekledim, bildiğiniz gibi CommandText ini verdim, ve az önce yarattığım Connection ı ona atadım. Bir SqlPipe tanımladım, SqlPipe bizim verilerimizi döndüren class, anca dikkat edin instancesini SqlContext.Pipe ile oluşturdum. Böylece bu Context de çalıştığını anlattım. Connection ı açtım ve SqlPipe ımın Send metodu ile oluşan (comm.ExecuteReader SqlDataReader döndürür.) SqlDataReader ımı yolladım. Son iş ise açmış olduğum Connection ı kapattım. Makaleninde başında belirttiğim gibi biraz daha Ado.Net kullanımına yaklaştırılmış durumda. Peki şimdi örneğimizin nasıl çalıştığını inceleyelim, Visual Studio 2005 ile Sql Server 2005 CTP sürümü birbiri ile tam entegre çalışabiliyorlar, biraz ileride ben komutlarını yazacağım ama ilk örneğimizi çabuk uygulamak için projemize sağ tuş Build diyelim, eğer bir problem yoksa yine Projemize sağ tuş bu sefer Deploy diyelim. Deploy dediğimizde, Visual Studio 2005 yazdığımız bu dll i Sql Server 2005 ekleyecek ve benim için otomatik olarak Stored Proceduremi verdiğim isimde oluşturacak. Bunun için hemen SQL Server Management Studio yu açın ve AdventureWorks veritabanını inceleyin. Aşağıdaki şekle bakabilirsiniz. ![]() Gördüğünüz gibi Assemblies bölümüne benim dll imi ekledi (ismi projenin ismi olarak) ve Stored Procedures bölümüne de benim yazdığım Stored Procedure yi ekledi. İsminide benim metoda verdiğim isim olarak (yani dbo.GetPersonAddressType olarak, başındaki dbo şemasını anlatıyor) bize sadece çalıştırmak kaldı. SQL Server Management Studio nun toolbarlarındaki sol üstten New Query Buttonuna basın, buradanda Database Engine Query i çalıştırın (standart olarak Master gelebilir, hemen altındaki ComboBox dan AdventureWorks ü seçin) buraya exec dbo.GetPersonAddressType yazın ve sonucu kendi gözleriniz ile görün ![]() peki biz niye .Net ile Stored Procedure yazalım ? aslında cevabı çok basit, .Net bir platform ve çok fazla artısı var, yazılmış hazır class lar hazır metotlar var. Bir program yazarken zaten .Net kullanıyoruz, ancak SQL Server a yada başka bir Veritabanı sistemine geldiğimizde, başka bir platform ile uğraşıyoruz, onu öğrenmek zorunda kalıyoruz ve genelde ANSII SQL standartlarını desteklemek zorunda olduğu için dilin bazı sınırları oluyor. Bu yüzden SQL i de geliştirip başka bir dil oluşturmak zorunda kalıyorlar örneğin T-SQL (yada PL/SQL) gibi bu sefer bambaşka bir platformda başka bir dil ile kodlama yapmanız gerekiyor. Yani bir yerde .Net dili yazıyorsunuz bir yerde T-SQL. Ve maalesef T-SQL in çok fazla sınırı var. İşte CLR entegrasyonun en önemli noktası bu, programcılar tek bir dil bilip bu dil ile uğraşabiliyorlar (tabiiki yine SQL yazıyorsunuz, ancak T-SQL yada PL/SQL gibi farklı yapıları ile uğraşmıyorsunuz) ve bununla birlikte .Net gibi çok gelişmiş bir platformu kullanıyorsunuz. Ancak nerede ve ne zaman .Net destekli Stored Procedure yi kullanacağımız da önemli. Örneğin sadece veri çekecekseniz, T-SQL destekli Stored Procedure çok daha performanslı çalışacaktır, ancak daha kompleks işlemler yapıyorsanız, örneğin iki farklı tablodan verileri çekip, istediğiniz kriterlere uyuyormu diye bakıp, sonra bunların birleştirilmiş halini geriye döndürmek gibi bir işlemse, yada Stored Procedure içinde örneğin bir dosyaya erişmek gerekiyorsa bir XML okunup, ona göre başka bir iş yapmak gerekiyorsa .Net destekli Stored Procedure ler kullanmak çok daha mantıklı. ![]() |
|||
|
03-05-2008, 12:02 AM
Mesaj: #2
|
|||
|
|||
|
RE: CLR Destekli Stored Procedure Yazmak
saol ya belkıı lazım olur bazılarınaa
|
|||
|
|
|
|
|
CLR Destekli Stored Procedure Yazmak ,CLR Destekli Stored Procedure Yazmak indir,CLR Destekli Stored Procedure Yazmak yükle,CLR Destekli Stored Procedure Yazmak download,CLR Destekli Stored Procedure Yazmak indirmek istiyorum,CLR Destekli Stored Procedure Yazmak yükle,CLR Destekli Stored Procedure Yazmak bedava, CLR Destekli Stored Procedure Yazmak İNDİR,CLR Destekli Stored Procedure Yazmak YÜKLE,CLR Destekli Stored Procedure Yazmakfree,CLR Destekli Stored Procedure Yazmakyukle,CLR Destekli Stored Procedure Yazmakİndir,CLR Destekli Stored Procedure Yazmakdownload,CLR Destekli Stored Procedure Yazmakinndir,CLR Destekli Stored Procedure Yazmak Dvdrip,CLR Destekli Stored Procedure Yazmak filmi indir,CLR Destekli Stored Procedure Yazmakonline izle,CLR Destekli Stored Procedure Yazmaksuper film,CLR Destekli Stored Procedure Yazmakbedava insit |
| Benzeyen Konular | |||||
| Konu: | Yazar | Cevaplar: | Görüntüleyenler: | Son Mesaj | |
| Php + MySQL + Apache + Phpmyadmin kurulumu | SoniQuake | 0 | 64 |
12-31-2007 08:27 PM Son Mesaj: SoniQuake |
|
| ::PHP'nin Yapılandırılması | SoniQuake | 0 | 38 |
12-14-2007 03:36 PM Son Mesaj: SoniQuake |
|
| ::Apache Web sunucusunun PHP Destekli Yapılandırılması | SoniQuake | 0 | 44 |
12-14-2007 03:36 PM Son Mesaj: SoniQuake |
|
| ::Apache Ve Php'nin Derlenmesi | SoniQuake | 0 | 21 |
12-14-2007 03:36 PM Son Mesaj: SoniQuake |
|
| ::Apache ve php'nin Derlenme Öncesi | SoniQuake | 0 | 38 |
12-14-2007 03:34 PM Son Mesaj: SoniQuake |
|





![[Resim: 1000000662img11nh4.gif]](http://img455.imageshack.us/img455/7306/1000000662img11nh4.gif)
![[Resim: 1000000662img21aw8.gif]](http://img455.imageshack.us/img455/5615/1000000662img21aw8.gif)
![[Resim: 1000000662img31dy3.gif]](http://img169.imageshack.us/img169/7496/1000000662img31dy3.gif)
![[Resim: 2lktzco.jpg]](http://i38.tinypic.com/2lktzco.jpg)


