28 Şubat 2015 Cumartesi

"How to import XML data to Sql Server", Sql Server a XML ile veri aktarımı


Normal şartlarda Sql Server üzerindeki import seçenekleri arasında xml import olmadığı için bu işlemi biraz kodla halletmemiz gerekiyor.Bunun için izlememiz gereken adımlar aşağıdaki gibidir.

Bu işlemler için örnek olarak Product tablomuz olduğunu ve XML içerisinde ProductCode ve ProductName verileri olduğunu düşünelim.


Örnek XML Verimiz
<Products>   
    <Product>      
        <ProductCode>GFRT1001</ProductCode>      
        <ProductName>Ülker Çikolatlı Gofret</ProductName>
   </Product>
    <Product>     
        <ProductCode>GFRT1002</ProductCode>      
         <ProductName>Çokonat</ProductName>   
    </Product>
</Products>



1 - Öncelikle yapmamız gereken xml verisini sql de bir tabloda tutmak için bir tablo oluşturup, xml formatında verilerimizi bu tabloya aktarmak.

--Tablo oluşturuluyor.
CREATE TABLE ProductXML (IntCol int, XmlCol xml);

--Oluşturulan tabloya xml aktarılıyor.(sadece bir satır veri eklenecek ve bu işlem veri boyutu ile doğru orantılı olarak biraz uzun sürebilir)

INSERT INTO ProductXML (XmlCol)
SELECT * FROM OPENROWSET(
   BULK 'C:\XMLDataDirectory\products.xml',
   SINGLE_BLOB) AS x;


2- Sonrasında aşağıdaki kodlar ile ürün verilerimizi saklamak için gereken tabloyu oluşturuyor ve bu tabloya olması gereken formatta ürün verilerimizi aktarıyoruz.


--Product tablomuz oluşturuluyor.
CREATE TABLE Product(ProductCode nvarchar(50), ProductName nvarchar(250))


--XML dökümanı okunuyor ve Product tablosuna toplu olarak ekleniyor.

DECLARE @XML XML;
DECLARE @hDoc INT;


--XML değişkenine ProductXML tablosuna eklenen xml atanıyor.
SELECT @XML = XmlCol FROM ProductXML 

--Sql içerisindeki standart storedprocedure
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML


--Product tablosuna xml içerisindeki her Product elementi içerisindeki kod ve isim bilgileri ekleniyor.
INSERT INTO Product
SELECT ProductCode, ProductName FROM OPENXML(@hDoc, '/Products/Product')
WITH(
           ProductCode [nvarchar](50) 'Code',
           ProductName [nvarchar](250) 'Name'
         )
--Not : WITH kısmı içerisindeki elementler 'Name' şekllinde alınıyor, cümlelerin başına @ koyduğumuzda element yerine property verilerini alabilir alt elementlere ulaşmak için ise ../ kullanarak alt elementlerdeki veirilere ulaşabiliriz.


EXEC sp_xml_removedocument @hDoc

--Ve sonuç çıktımız

SELECT * FROM Product


ProductCode       ProductName
----------------       -------------------------
GFRT1001                 Ülker Çikolatlı Gofret
GFRT1002                 Çokonat



Karşılaşılabilecek hatalar : 

1. kısımda "You do not have permission to use the bulk load statement" hatasını alabilirsiniz.Bu durumda sql query penceresinde işlem yaptığınız kullanıcı ile ilgili bazı yetkilendirmeler yapmanız gerekiyor.Bunun için aşağıdaki aşamalar uygulanabilir.

1.Sql Server daki "Security" kısmını açarız.
2."Logins" bölümü açılır
3.İlgili kullanıcı için sağ tuş özellikler(Properties) tıklanır.
4.Sol bölümdeki "Roles" tabı açılır ve "bulkadmin" seçeneğine tıklanarak ilgili kullanıcı için bulk insert işlemine yetki verilir.
5.İşlem tamamdır :)



Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

22 Şubat 2015 Pazar

İzmir Hackerspace "Ruby" Eğitimi Buluşması


Geçtiğimiz Pazar günü İzmir Hackerspace de Ruby üzerine bir eğitim toplantımız vardı.Ben Ruby ile ilgili olmama rağmen çok vakit ayırıp ta üzerine çalışmalar yapamıyordum ama böyle bir fırsat bulunca hemen kayıt olup gittim.

Gerçekten de gerek eğitmenlerin yetkinliği gerek te katılımcıların sektör de ki yetkinlikleri dolayısı ile oldukça keyifli ve faydalı bir eğitim oldu bizim için.

Şimdi biraz eğitimden bahsedelim.


Öncelikle Ruby de herşey nesnelerden oluşuyor.Ayrıca oldukça kolay bir syntax ı var.Nesne yönelimli programlama hakkında tecrübesi olan herkes rahatlıkla öğrenip kullanabilir.Toplantı sırasında bile hemen birkaç karalama ile birşeyler yazdım ben aşağıdaki gibi, bakalım neler öğrenmişiz workshop ta.


Ruby workshop ından karalamalar : 
Burada yapılan pratikler
- Dizi Kullanımı
- Nesne kullanımı
- Method kullanımı
- attribute kullanımı
- Constructor kullanımı
- comment bloğu kullanımı

Ruby Kodu : 
# ruby içerisinde comment bloğu yazmak için # kullanılıyor.

#yeni bir class oluşturuluyor
class Kitapbuekip

#attribute olarak bir değişken oluşturuluyor.Ve tüm class içerisinde kullanılabiliyor.
attr_accessor :arr

#class için constructor çalıştırılıyor.
def initialize()
#Diziye constructor metodu içerisinde değer atanıyor.
@arr = ['Emre Göl']
end

#Diziye yeni bir eleman ekleme için addMember metodu oluşturuluyor
def addMember(name)
@arr << name
end

#dizinin tüm elemanları döndürülüp ekrana yazdırılıyor.
def printMembers
@arr.each { |i| puts i.capitalize }
end

#Dizinin eleman sayısı getiriliyor.
def getCount
@arr.size
end

end

‪#‎nesne oluşturuluyor.
ekip = Kitapbuekip.new()
‪#‎nesne içerisinde meytod kullanılarak üye ekleme işlemi yapılıyor.
ekip.addMember("Damla Gülmez")
ekip.addMember("Oğuzhan Legastive Sarıtaş")
ekip.addMember("Burçin Özpişkin")
ekip.addMember("Çağlar Ergül")

‪#‎nesne içerisinde üyelerin listesi ekrana yazdırılıyor.
#puts ekrana yazı yazdırmayı sağlıyor burada.C# daki Console.Write("") gibi yada javadaki System.out.print("") gibi.puts "üye listesi"
puts "-----------"
ekip.printMembers
#üye sayısı metod ile getiriliyor.burada metod integer değer döndürdüğü için string e dönüşüm yaptırıyoruz.Bunu to_s extension uyla yapıyoruz.

puts "sayı : " + ekip.getCount.to_s


Output :

Ruby e başlamak için faydalı olabilecek linkeri aşağıda bulabilirsiniz.

TOPLULUK
e-posta listesi’ne kayıt olabilirsiniz.
KURULUM
Windows:
Ubuntu/Debian:
sudo apt-get install ruby
RVM:
FAYDALI LINKLER


Hackerspace buluşamasından kareler : 








Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

13 Şubat 2015 Cuma

"MySql.Data.MySqlClient.MySqlException: Parameter ‘@rownum’ must be defined" Hatası ve Çözümü


Çalıştığım bir entegrsayon projesinde, mysql de çalışırken mysql ortamında hazırladığım query içerisinde değişken tanımı kullanmıştım ve mysql de sorgu sorunsuz çalışıyordu fakat .net üzerinde mysqlcommand a sorguyu ekleyip çalıştırmaya çalıştığımda aşağıdaki gibi bir hata ile karşılaştım.

MySql.Data.MySqlClient.MySqlException: Parameter ‘@rownum’ must be defined.

Biraz araştırma yaptıktan sonra .Net MySql connector  un 5.2 versiyonundan sonra bu özelliği desteklediğini ve connection string imize "Allow User Variables=True;" kısmının eklenmesi gerekdiği sonucuna ulaştım.Versiyon kontrolü ve connection string e küçük bir ekleme sonrası bu hatayı kolaylıkla aşabiliyor ve projeye devam edebiliyorsunuz :)
Yunus Emre Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.