Skip Navigation LinksAna sayfa : ASP.NET yazılarım
Kategorilerim

En son beş asp notum...

Planlanan yazılarım...

asp.net tanımsız kullanıcılar
İnternetten para kazanma yöntemleri

asp yazilarim...

09.02.2010
iki veritabanı arasında olmayan sp bulma.

iki veritabanı arasında olmayan sp(stored procedure), FN(function), V(view), U(Table) bulunması

Böyle bir yazı yazmamın amacı;
    2009 yılına ait bir veritabanı kullanıyorsunuz ve 2010 yılında bu veritananını yeniden oluşturyorsunuz. Ama kullandığınız program (ERP, MRP, vs.) bunları otomatik olarak yapıyor. Fakat siz 2009 yılında bir takım P(stored procedure), FN (function), V(view), U(Table) oluşturdunuz ve bunları yeni açılan veri tabanında olup olmadığının kontrolünü yapıp yeni veritabanına aktarmak istiyorsunuz.

Bu makalemde sizlere bunu anlatacağım. şimdiyekadar muhtemelen kullanmadığınız değişik bir yöntemle yapacağız. EXCEL kullanarak hem iki veritabanındaki farklılıkları bulacağız hemde bu farklılıkları otomatik oluşturacağız.

Sırasıyla Yapmamız gerekenler;

  • Öncelikle iki veri tanabı arasında olmayan stored procedure yada function' ları bulan ve table donduren bir function yazacağız.
  • Bunları excel'de listeliyeceğiz
  • Bu stored procedure, function'ların sahip olduğu komut satırlarını bulan bir kod yazağız.
  • Bu kodları EXCEL'de ilgili storedProcedure'un karşılığı olarak getittireceğiz.
  • Saha sonra bir komut satırıyla bunları olmayan veri tabanımızda oluşturacağız.
  • SQL programımıza girerek Fonksiyonumuzu hazırlayalım

            
    --ilk veritabanımızdaki tüm kayıtlar getireleceğinden
    --ikinci veritabanında karşılığı olmayan stored procedure'ler
    --null değer alacaktır. LEFT OUTER JOIN ile iki veritabanını
    --ilişkilendiriyoruz.
            
    create function SH_iki_veritabani_arasinda_olmayan_veriler_TABLE (@verininCinsi nvarchar (5))
        returns table as
        return
            (
                select  
                    ilkVeriTabani.name as ilkVeriTabani_NAME 
                    ,ilkVeriTabani.id as ilkVeriTabani_ID
                    ,ikinciVeriTabani.NAME as ikinciVeriTabani_NAME
                    ,ikinciVeriTabani.id  as ikinciVeriTabani_ID from byhasanusta.dbo.Sysobjects  as ilkVeriTabani
                    left OUTER join byhasanustayedek.dbo.Sysobjects  as ikinciVeriTabani  
                    ON ilkVeriTabani.name = ikinciVeriTabani.name 
                    where ilkVeriTabani.Xtype = @verininCinsi
            )
    
    
    Burada Sysobjects tablosundan bilgi aldık. Daha önceki dersimizde bu tablonun içeriğini incelemiştik.

  • Şimdi gelelim Excel'e. Bir excel dosyası açalım.
    Burada dikkat ederseniz üst tarafta bir componentimiz mevcut. controls adı altında. Eğer bu sizde ekli değilse, menü çubuğunda sağ tuşa basarak ekleyebilirsiniz.

    Menü Çubuğunda sağ tuşa basın -> Customize Quick Access Tollbar' ı seçin. Aşağıdaki ekran gelecek ve buradan Controls tool'unu bulup Add' itıklayın. Ok 'e basarak ekranı kapatın.

    Controls -> Insert -> ActiveX Controls' un altından bir adet button seçelim. Ve Excel'e ekleyelim. Aşağıdaki gibi bir görüntümüz olacak.

    Şimdi Command Button1' i tıklayarak kod editörümüzde geçelim. Kodlamaya geçmeden önce yapmamız gereken EXCEL' e kütüphaneden bir kitaplık eklememiz.

    Tools -> References tıklayalım. Burada bize kütüphane listesi açılacak.

    Burada microsoft ActiveX Data Object 2.1 Library 'i işaretliyelim. Ve OK butonuna basalım.

    Aşağıdaki gibi bir Sub oluşturalım. Ve butonumuzun Click olayına veritabanindaOlmayanSP yazalım.

    Public Sub veritabanindaOlmayanSP(veriTabani As String)
    
        'Bağlantı Nesnesi yaratıyoruz
        Dim conn As ADODB.Connection
        Set conn = New ADODB.Connection
    
        'SQL Bağlantısı için string tanımlıyoruz
        Dim connstr As String
    
        'SQL Server OLE DB Provider' kullanıyoruz
        connstr = "PROVIDER=SQLOLEDB;"
    
        'SHASANUSTA Server'a bağlanıyoruz. Veritabanı olaraj firma değişkeni atadık.
        connstr = connstr & "DATA SOURCE=SHASANUSTA;INITIAL CATALOG=" & veriTabani
    
        'Bağlantıyı oluşturuyoruz.
        connstr = connstr & "Integrated Security=SSPI;"
    
        'Bağlantıyı açıyoruz.
        conn.Open connstr
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        Dim cmd As New ADODB.Command
        cmd.CommandType = adCmdText
        cmd.ActiveConnection = conn
        
        'SQL cümlemizi yazıyoruz
        cmd.CommandText = "select * from SH_iki_veritabani_arasinda_olmayan_veriler_TABLE('P') where ikinciVeriTabani_NAME is null"
        
        'dönen satayı bir record sette tutuyoruz
        Set rs = cmd.Execute
        
        'bağlantıyı boşaltıyoruz.
        Set conn = Nothing
        
        'Record Set'in yapısı excel gibi olduğundan
        'içerisindeki bilgiyi direkt istediğimiz
        'bir hücreye yapıştırabiliyoruz
        
        Sheet1.Cells(2, 1).CopyFromRecordset rs
         
        
    End Sub
    
    Private Sub CommandButton1_Click()
        veritabanindaOlmayanSP ("byhasanusta;")
    End Sub
    

    çalıştırıp sonuca baktığımızda. Ilk veritabanımızda olupta ikinci veritabanında olmayan stored Procedure'ler listelenmiş oldu.

  • Şimdi Tekrar SQL programımıza gelelim ve aşağıdaki stored procedure yazalım ve oluşturalım.
    create procedure SH_sp_F_komut_satirlari_getir  
        @sp_veya_F_ID nvarchar(100)  
        AS
        select text from SysComments where id=@sp_veya_F_ID
    

  • Şimdi texrar Excel dosyamıza gelelim ve bir Command Button oluşturalım. Ayrıca aşağıdaki Sub'ı yazalım.

    Public Sub veritabanindaOlmayanSPKomutsatiriGetir(veriTabani As String)
    
        'Bağlantı Nesnesi yaratıyoruz
        Dim conn As ADODB.Connection
        Set conn = New ADODB.Connection
    
        'SQL Bağlantısı için string tanımlıyoruz
        Dim connstr As String
    
        'SQL Server OLE DB Provider' kullanıyoruz
        connstr = "PROVIDER=SQLOLEDB;"
    
        'SHASANUSTA Server'a bağlanıyoruz. Veritabanı olaraj firma değişkeni atadık.
        connstr = connstr & "DATA SOURCE=SHASANUSTA;INITIAL CATALOG=" & veriTabani
    
        'Bağlantıyı oluşturyoruz.
        connstr = connstr & "Integrated Security=SSPI;"
    
        'Bağlantıyı açıyoruz.
        conn.Open connstr
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        Dim cmd As New ADODB.Command
        'Bu sefer komut tipimizi stored procedure olarak değiştiriyoruz
        cmd.CommandType = adCmdStoredProc
        
        cmd.ActiveConnection = conn
        
        'SQL cümlemizi yazıyoruz
        cmd.CommandText = "SH_sp_F_komut_satirlari_getir"
        
        'Satırlar arasında döneceğimiz için
        'Bir değişken tanımlıyoruz
        Dim i As Integer
        
        'storedProcedure atamak için değişkenimiz tanımlıyoruz.
        'SQL' de tanımladığımız sp miz bizden parametre isteyecek
        'Bu parametreyide Excel'deki satırlardan temin edeceğiz.
        Dim spText As String
          
            For i = 2 To 7
            
                    spText = Sheet1.Cells(i, 2).Value
                    
                    cmd.Parameters.Append cmd.CreateParameter("@sp_veya_F_ID", adVarChar, adParamInput, 100, spText)
                
                    'dönen satayı bir record sette tutuyoruz
                    Set rs = cmd.Execute
                    
                    'İçerisindeki bilgi teksatır döneceğinde ilgili satırın
                    'karşısına sql'deki kod bloğumuzu yapıştırıyoruz.
                    Sheet1.Cells(i, 5).Value = rs.GetString()
                    
                    Set rs = Nothing
                    cmd.Parameters.Delete ("@sp_veya_F_ID")
                                      
            Next i
            
        'İşimiz bitince bağlantıyı boşaltıyoruz.
        Set conn = Nothing
         
    End Sub
    
    Private Sub CommandButton2_Click()
        veritabanindaOlmayanSPKomutsatiriGetir "byhasanusta;"
    End Sub
    
    

    ikinci butonumuza tıklayınca ilgili stored Procedure ait komut satırları sayfa1' de 5. kolona gelecektir. Bundan sonra geriye yapılacak tek bir işlem kalıyor bunları ikinci veritabanımızda oluşturmak.

    excel görüntümüz aşağıdaki gibi olacaktır;

    "E" sütununda ilgili stored Procedure ait komut satırları yer almaktadır.

  • Gelelim bunları ikinci veritabanımızda oluşturmaya.

    Excel dosyamızda üçüncü bir Command Button oluşturalım ve aşağıdaki kodlamayı yapalım.

    Public Sub komut_satiri_calistir(firma As String)
        'Bağlantı Nesnesi yaratıyoruz
        Dim conn As ADODB.Connection
        Set conn = New ADODB.Connection
    
        'SQL Bağlantısı için string tanımlıyoruz
        Dim connstr As String
    
        'SQL Server OLE DB Provider' kullanıyoruz
        connstr = "PROVIDER=SQLOLEDB;"
    
        'SHASANUSTA Server'a bağlanıyoruz. Veritabanı olarak firma değişkeni atadık.
        connstr = connstr & "DATA SOURCE=SHASANUSTA;INITIAL CATALOG=" & veriTabani
    
        'Bağlantıyı oluşturyoruz.
        connstr = connstr & "Integrated Security=SSPI;"
    
        'Bağlantıyı açıyoruz.
        conn.Open connstr
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
        Dim cmd As New ADODB.Command
        'komut tipimizi tekrat text olarak değiştiriyoruz
        cmd.CommandType = adCmdText
            
        cmd.ActiveConnection = conn
        
        'Satırlar arasında döneceğimiz için
        'Bir değişken tanımlıyoruz
        Dim i As Integer
        
           For i = 2 To 7
            
                    'SQL cümlemizi yazıyoruz. Bu sefer sql cümlemiz
                    'E kolonundaki cümlelerimiz olacak.
                    cmd.CommandText = Sheet1.Cells(i, 5).Value
                   
                    Set rs = cmd.Execute
                    
                    'Bilgi amaçlı 3. kolona "ok" yazdırıyorum.
                    Sheet1.Cells(i, 3).Value = "ok"
                    
                    Set rs = Nothing
                    
                  
            Next i
            
        'İşimiz bitince bağlantıyı boşaltıyoruz.
        Set conn = Nothing
    
    End Sub
    
    Private Sub CommandButton3_Click()
        'Dikkat!!! stored procedur' leri oluşturacağım
        'veri tabanını belirtiyorum.
        komut_satiri_calistir "byhasanustayedek;"
    End Sub
    
    

    İşimiz bittiğinde görüntümüz aşağıdaki gibi olacaktır. SQL' de stored procedurlerinizi kontrol edebilirsiniz.

CommandButton1: İkinci veritabanında olmayan stored procedurleri getirdi.

CommandButton2: Bunlara ait komut satırlarını getirdi.

CommandButton3: İkinci veritabanında olmayan stored procedurleri oluşturdu.

Yapacaklarımızın hepsi bukadar. CommandButton1' de "P" parametresi gönderdik "P" parametresi çekeceğimiz verinin procedurlerden oluşacağını gösterir. Eğer function olsaydı "fn" yazardık. Bu şekilde istediğimiz verinin kontrolünü yaptırabiliriz.



Bebeğimize isim seçiyoruz.


25 Nisan 2010 rüzgarlı bir Pazar akşamı saat 20:00 civarlarında Bebeğimiz FURKAN dünyaya merhaba dedi.

Ankete katılan tüm arkadaşlara Teşekkür ediyoruz.


FURKAN isminin anlamı