tag:blogger.com,1999:blog-6501107854818923929.post-37207958329325095202008-01-14T06:22:00.000-08:002008-01-14T06:37:15.028-08:00SQL Server 2005 içerisinde Managed Code Kullanmak<strong>SQL Server 2005 içerisinde Managed Code Kullanmak</strong><br /><br /><div><div>SQL Server 2005 de veritabanı nesneleri T-SQL veya Managed code(yönetimsel kod) ile oluşturulur. Table, view gibi nesneler T-SQL deyimleri ile oluşturulur. Stored procedure, trigger, user-defined function, user-defined type ve aggregates gibi nesneler ise Managed code ile oluşturulabilir. Bu nesnelerin Managed code ile geliştirilmeleri aşağıdaki avantajları sağlar.</div><br /><div></div><div>Managed code, Net dillerinin güçlü yapısını kullanır. Örneğin exception handling(hata kontrolleri), object orientation (nesne yönelimi) ve ileri düzey koşul kontrolleri gibi.<br />Managed code, .Net Framework’ün temel sınıf kütüphanelerini (base class library) kullanır.<br />Managed code, CPU’nun daha etkin kullanılmasını sağlar. </div><div> </div><div>Managed code ile uygulama geliştirmek için Visual Studio 2005 kullanılır. Visual Studio 2005 içerisinde Visual Basic veya Visual C# seçtikten sonra, Database Proje tipini seçerek uygulama geliştirebilirsiniz.</div><br /><div>Bu makalemde Managed code ile user-defined function yazarak SQL Server 2005 için assembly oluşturacağım.</div><div> </div><div><a href="http://2.bp.blogspot.com/_ybjaTHsa6dA/R4tw0J20LuI/AAAAAAAAADM/m5nsjmVg9QM/s1600-h/1000000352_image001.jpg"><img id="BLOGGER_PHOTO_ID_5155338239757004514" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_ybjaTHsa6dA/R4tw0J20LuI/AAAAAAAAADM/m5nsjmVg9QM/s400/1000000352_image001.jpg" border="0" /></a></div><div> </div><div>Projeyi oluşturduktan sonra, “Add New Reference” butonunu tıklayarak SQL Server 2005’e bağlanın.</div><br /><div><a href="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4txGZ20LvI/AAAAAAAAADU/HZnWE1S2BNU/s1600-h/1000000352_image002.jpg"><img id="BLOGGER_PHOTO_ID_5155338553289617138" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4txGZ20LvI/AAAAAAAAADU/HZnWE1S2BNU/s400/1000000352_image002.jpg" border="0" /></a></div><br /><div></div><div>AdventureWorks veritabanı seçelim ve “Test Connection” butonunu tıklayarak bağlantıyı test edelim. Ok butonunu tıklayarak, “Add Database Reference” penceresine tekrar geçelim.</div><div> </div><div><a href="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4txUZ20LwI/AAAAAAAAADc/WmyQxLFUjLw/s1600-h/1000000352_image003.jpg"><img id="BLOGGER_PHOTO_ID_5155338793807785730" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4txUZ20LwI/AAAAAAAAADc/WmyQxLFUjLw/s400/1000000352_image003.jpg" border="0" /></a><br /></div><br /><div>“AddDatabaseReference” penceresinden en son eklediğimiz veritabanını(connection string) seçin.<br /></div><div><a href="http://2.bp.blogspot.com/_ybjaTHsa6dA/R4txsJ20LxI/AAAAAAAAADk/1Izfe4yN-8U/s1600-h/1000000352_image004.jpg"><img id="BLOGGER_PHOTO_ID_5155339201829678866" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_ybjaTHsa6dA/R4txsJ20LxI/AAAAAAAAADk/1Izfe4yN-8U/s400/1000000352_image004.jpg" border="0" /></a><br /></div><div>Aşağıdaki mesaj kutusuna üzerinde, “No” butonunu tıklayarak projeyi oluşturun.</div><div> </div><div><a href="http://1.bp.blogspot.com/_ybjaTHsa6dA/R4tyA520LyI/AAAAAAAAADs/dkP_76WZluI/s1600-h/1000000352_image005.jpg"><img id="BLOGGER_PHOTO_ID_5155339558311964450" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_ybjaTHsa6dA/R4tyA520LyI/AAAAAAAAADs/dkP_76WZluI/s400/1000000352_image005.jpg" border="0" /></a><br /></div><br /><div>Projeyi oluşturduktan sonra, Project menüsünden “Add User-Defined Function” menüsünü tıklayın.</div><br /><div></div><div>Proje üzerinde veritabanı işlemleri gerçekleştirmek için sqlaccess.dll ve System.Data.dll kütüphanelerini eklenmelidir. (Project menüsünden, “Add Reference” menüsünü tıklayarak kütüphanaleri projeye ekleyebilirsiniz) Bu kütüphaneler proje ile beraber gelir.<br />Eklediğimiz sınıfın(class) kod bölümüne aşağıda kodu ekleyin</div><div><span style="color:#3333ff;"><?XML:NAMESPACE PREFIX = SqlFunction(Name /><sqlfunction(name:="getlongdate")></sqlfunction(name:="getlongdate")></span> </div><div><span style="color:#3333ff;"><sqlfunction(name:="getlongdate")><sqlfunction(name:="getlongdate")> _</sqlfunction(name:="getlongdate")></span></div><div><span style="color:#3333ff;"><sqlfunction(name:="getlongdate")>Public Shared Function GetLongDate _<br />(ByVal DateVal As SqlDateTime) As SqlString<br />Return DateVal.Value.ToLongDateString()<br />End Function</span></div><br /><div>Kod satırlarını ekledikten sonra projeyi deploy yapın. Projeyi deploy yapmak için, Proje üzerinde sağ tuşa basın ve açılan menüden “Deploy” menüsünü tıklayın.</div><br /><div></div><div>Eklediğimiz user-defined function’ı görmek için SQL Server Managed Studio’u açın.<br /></div><div>Eklediğimiz user-defined function aşağıdaki gibi gözükecektir.</div><br /><div></div><a href="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4tywZ20LzI/AAAAAAAAAD0/X7O1y6PvmWk/s1600-h/1000000352_image008.jpg"><img id="BLOGGER_PHOTO_ID_5155340374355750706" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_ybjaTHsa6dA/R4tywZ20LzI/AAAAAAAAAD0/X7O1y6PvmWk/s400/1000000352_image008.jpg" border="0" /></a><br /><div></div><br /><div>Fonksiyonu çalıştırmak için yeni bir sorgu(New Query) ekleyin ve aşağıdaki kodları yazın.</div><div><br /><span style="color:#3333ff;">exec sp_configure 'clr enabled', 1<br />GO<br />RECONFIGURE<br />GO<br />USE AdventureWorks<br />SELECT dbo.GetLongDate('01/01/2006')</span></div><span style="color:#3333ff;"><div><br /></span>SQL Server 2005 içerisinde varsayılan olarak Net Framework pasifdir. Aktif hale getirmek için “sp_configure” stored procedure kullanılır.</div><div><br />Bu konu ile ilgili “SQL Server 2005 ve Net CLR” başlıklı makalemi de okuyabilirsiniz.<br />Başka bir makalede görüşmek üzere...</div><div><br />Tamer ŞAHİNER<br /><a href="mailto:Tamer.sahiner@bilgeadam.com">Tamer.sahiner@bilgeadam.com</a></div></div></sqlfunction(name:="getlongdate")><br /><sqlfunction(name:="getlongdate")></sqlfunction(name:="getlongdate")><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6501107854818923929-3720795832932509520?l=tamersahiner.blogspot.com'/></div>tamersahinerhttp://www.blogger.com/profile/00797131681729869275noreply@blogger.com0