C# ile Oracle veritabanına insert update işlemleri

  • 25.02.2016 09:45
  • C Sharp
  • 6056

Şirketteki bir problem nedeniyle belirli Xml dosyalarının içeriğinin Oracle veritabanına eklenmesi gerekiyordu. Xml dosya sayısının fazla olması sebebiyle mecbur bunu ufak bir program geliştirerek yapmak zorunda kaldık. Gelin şimdi adım adım bu işlemi nasıl yaptık inceleyelim.

İlk önce projeye System.Data.OracleClient dll' ini referans olarak ekledik ve OracleConnection sınıfını kullanarak bağlantı yapmayı denedim. Fakat bu dll' in artık deprecated olduğu ile ilgili bir hata çıktı ve akabinde "System.Data.OracleClient requires Oracle client software version 8.1.7 or greater." hatasını aldık. Araştırmalar sonucu Oracle Client Software' in daha yüksek bir versiyonunu yükledik. Bunun için aşağıdaki linkleri ziyaret etmelisiniz.

Bu linkten http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html Oracle Data Acces Components 12.1.0.2.4 versiyonunu indirmemiz gerekiyor. Bu dosyayı indirdikten sonra aşağıdaki adımları izleyerek kurulumu gerçekleştirmelisiniz:

  • İndirdiğimiz zipteki dosyaları bir yere çıkarın.
  • Çıkardığınız klasördeki setup.exe dosyasını yönetici olarak çalıştırın.
  • Kurulumu yaparken işletim sisteminizin bulunduğu sürücünün ana dizinine "Oracle Home" adında bir klasör oluşturun.
  • Kurulum sırasında dil seçiminden sonra karşınıza çıkan ekrandan "Use Windows Built-in Account" seçeneğini seçin.
  • Sonraki ekranda "Oracle Base" yazan bölümdeki adrese daha önce oluşturduğunuz "Oracle Home" klasörünü seçin.
  • Sonraki ekranda bulunan tüm checkboxları işaretleyin ve sonraki bölümleri next butonuna tıklayarak kurulumu tamamlayın.

Bu kurulum bittikten sonra http://www.oracle.com/technetwork/topics/dotnet/downloads/odacmsidownloadvs2013-2756823.html adresinden Oracle Developer Tools for Visual Studio 2013 kurulum dosyasını indirin. Bu bize oracle veritabanına bağlanmamız için gereken sürücü ve dllleri temin edecektir. Bu kurulum için herhangi özel bir ayar yok. Normal bir şekilde kurulumunuzu gerçekleştirebilirsiniz. Bu işlemlerden sonra kurulumu yaptığımız "Oracle Home" klasöründe "tnsnames.ora" dosyasını aratarak bulun. Bu dosyada aşağıdaki alanlara gereken bağlantı bilgilerini yazmanız gerekiyor.

<data source alias> =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <hostname or IP>)(PORT = <port>))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = <database service name>)
    )
  )

Bu işlemleri tamamladıktan sonra projemize aşağıdaki dlleri referans olarak ekliyoruz. Kurulumları yapmadan önce bu dlller referans ekleme ekranındaki "Assemblies > Frameworks" alanında görünmeyecektir. Bu yüzden mutlaka kurulumları tamamlayınız.

  • Oracle.ManagedDataAccess
  • Oracle.ManagedDataAccessDTC
  • Oracle.ManagedDataAccessIOP

Oracle ile connection kurmak için Oracle.ManagedDataAccess.Client altındaki OracleConneciton classını kullanacağız. Artık kodumuza başlayalım. Ben yaptığım işlemleri uzun uzun anlatmayacağım. İlk önce Oracle Select komutunu kullandığım kod parçasını ekliyorum:

public Parametreler GetVKNoAndIslemTarihi(string vkNo, string uid)
{
            string sorgu = @"select VKN, ISLEM_SAATI 
                             from   file_content 
                             where path =(select PATH from incoming_invoice where INVOICE_ID='" + vkNo + "' and  uuid='" + uid + "')";
            OracleConnection con = new OracleConnection();

            con.ConnectionString = "User Id=username;Password=psw123;Data Source=10.111.122.144;";
            con.Open();

            OracleCommand cmd = new OracleCommand();
            cmd.Connection = con;
            cmd.CommandText = sorgu;
            cmd.CommandType = CommandType.Text;
            OracleDataReader dr = cmd.ExecuteReader();
            dr.Read();

            Parametreler p = new Parametreler();
            p.VKno = dr.GetString(0);
            p.IslemTarihi = dr.GetString(1);

            con.Dispose();
            return p;
}
public class Parametreler
{
        public string VKno { get; set; }
        public string IslemTarihi { get; set; }
}

Yukarıdaki kodda incoming_invoice tablosundan ihtiyacım olan iki bilgiyi çekiyorum. Ve bu bilgiler ile parametre nesnemi return ediyorum. Daha sonra bu parametre nesnesini update sorgumda kullanacağım.

        public void updateCommand(Parametreler p, byte[] blobFile)
        {
            OracleConnection con = new OracleConnection();
            con.ConnectionString = "User Id=username;Password=psw123;Data Source=10.111.122.144;";
            con.Open();

            string qry = "Update file_content Set Content= :BlobParameter where VKN=" + p.VKno + " AND ISLEM_SAATI=" + p.IslemTarihi;
            
            OracleParameter blobParameter = new OracleParameter();
            blobParameter.OracleDbType = OracleDbType.Blob;
            blobParameter.ParameterName = "BlobParameter";
            blobParameter.Value = blobFile;


            OracleCommand cmd = new OracleCommand(qry, con);
            cmd.Parameters.Add(blobParameter);

            cmd.ExecuteNonQuery();
            cmd.Dispose();
            con.Close();
        }

Yukarıki kodda daha önce select sorgusu ile oluşturduğum parametreleri parametreler classı ile metoduma veriyorum. Ayrıca veritabanına update edeceğim blob dosyamı da parametre olarak dışarıdan alıyorum. Update sorgusuna gerekli where kriterimi ekledikten sonra :BlobParameter parametresi ile byte[] blob dosyamı gönderiyorum.

Bütün işlem bu kadar arkadaşlar. Lütfen aklınıza takılan bir konu olursa iletişim sayfamdan veya yorum ekleyerek bana bildirin.

Sağlıcakla kalın.

Bu yazıya yapılan yorumlar:

  • Uğur

    18.07.2018 14:19

    Hocam Selamlar, Bu bir web uygulaması olsaydı. Bu dll leri uygulamamıza ekledikten sonra server üzerinde oracle client yüklememize gerek kalacakmıydı. Teşekkürler

Siz de düşüncelerinizi yazabilirsiniz:

;