XML > SQL Servera veri aktarımı: vb.net


Aşağıda data.xml dosyasındaki verileri SQL sorgusu kullanarak SQL database’a aktarıyoruz.
XML dosyasının içeriği;

adsiz.jpg

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try
Dim strInsertStmt, asset_name, asset_rfid As String
Dim dbConn As New SqlClient.SqlConnection("SERVER=localhost;UID=sa;PWD=;DATABASE=A-data;")
Dim sqlComm As New SqlClient.SqlCommand()
dbConn.Open()
If dbConn.State Then
sqlComm.Connection = dbConn

Dim xmlDoc As New Xml.XmlDocument()
Dim dataNodes As Xml.XmlNodeList
Dim aNode As Xml.XmlNode

xmlDoc.Load(c:\temp\data.xml)
dataNodes = xmlDoc.SelectNodes("/aa/bb")

For Each aNode In dataNodes

Try
asset_name = aNode.ChildNodes.Item(0).InnerText
asset_rfid = aNode.ChildNodes.Item(1).InnerText

strInsertStmt = "INSERT INTO a-table(Asset_name, Asset_rfid) VALUES ('"
strInsertStmt += asset_name + "','" + asset_rfid + "')"
sqlComm.CommandText = strInsertStmt
sqlComm.ExecuteNonQuery()
Catch e2 As Exception
MsgBox("Error: " & e2.Message)
End Try
Next
dbConn.Close()
Else : MsgBox("Database bağlantısı kurulamadı...")
End If

Catch e1 As Exception
MsgBox("Error: " & e1.Message)
End Try
End Sub

Bilgiler SQL servera aktarıldı.
Umarım işinize yarar.

Reklam

17 Comments

  1. Merhaba
    XML > SQL Servera veri aktarımı: vb.net 26 bu kod benim için çok yararlı oldu.Ama .net 2005 de oluşturmak istediğimde bir c: dosya yolunda çift tırnak ekledim çalıştı ama 2 kere
    Error:Line 1:Incorrect syntax near ‘*, hatasını verdi sebebini bulamadım sebebi ne olabilir .Acaba verilerin data tipleri ile ilgilimi databasede text olarak açtım
    Cevap verirseniz sevinirim.problem nerde acaba
    İyi çalışmalar

  2. Sanırım bu (Error:Line 1:Incorrect syntax near ‘*) hata strInsertStmt değişkenine insert into syntax’ını eklerken oluyor. Yani en mantıklı yorum bu. Bu değişkene INSERT INTO ile başlayan satılardan sonra XML dosyasından veri ekledğiniz zaman, eğer içerisinde tırnak işareti bulunan bir veri geliyorsa problem çıkabilir.

    yani;

    Monitor Fiyat
    19’inc 100
    17inc 85

    birinci satırda gelen ‘ işareti değişkene eklenirken hata verecektir. Bunu ayıklamanız gerekir. Replace komutu kullanarak ayıklayabilirsiniz.

  3. Merhaba evet tırnak işaretine takılmışım.tşk.
    Bu örneğinizde birşey daha sormak istiyorum
    asset_rfid değişkenini integer tanımlarsam aşağıdaki komut nasıl olmalı
    asset_rfid = aNode.ChildNodes.Item(1).InnerText ve strInsertStmt deki alanlarda ne gibi bir değişiklik yapmam gerekir.
    İyi çalışmalar

  4. Tekrar merhaba birşey daha sormak istiyorum cevaplıyabilirseniz sevinirim.

    Böyle bir xml nodeları olan bir xml dosyasını açarken aşağıdaki gibi gösterdim ama olmadı.Datanodesu nasıl belirtmeliyim. yada nerelre dikkat etmeliyim
    dataNodes = xmlDoc.SelectNodes(“//.”)
    Aslında
    Aşağıdaki xml’i gönderdiğim dosyayı sizin örneğinize uyarlamaya çalışıyorum
    ——————–

    2050198
    ELİF
    Niyazi Sarıkaya
    Şehit Süleyman bey mah. No:42
    BALIKESİR
    BANDIRMA
    0212/444444
    14/08/2008
    35511

    Kargo
    0

    İç Tül
    80101476
    80101476
    1
    TOP
    6.00
    86.94

    ————————–

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try
    Dim strInsertStmt As String
    Dim FIRMA, FIRMAYETKILI, SEVKADRES, IL, ILCE, TELEFON, SIPARISNO, SIPARISNOTU, GONDERIMSEKLI, URUNCINSI, URUNKODU, URUNADI, BIRIM As String
    Dim FIRMACARIKOD As Integer
    Dim SIPARISTARIHI As Date
    Dim KESIM As Integer
    Dim ADET, METRE, TUTAR As Decimal

    Dim dbConn As New SqlClient.SqlConnection(“SERVER=localhost;UID=sa;PWD=admin1;DATABASE=ADATA;”)
    Dim sqlComm As New SqlClient.SqlCommand()
    dbConn.Open()
    If dbConn.State Then
    sqlComm.Connection = dbConn

    Dim xmlDoc As New Xml.XmlDocument()
    Dim dataNodes As Xml.XmlNodeList
    Dim aNode As Xml.XmlNode

    xmlDoc.Load(“c:\XMLSIPARISPROJE\XMLDATA\35511-Kesimsiz.xml”)
    ‘dataNodes = xmlDoc.SelectNodes(“//SIPARIS/FIRMACARIKOD/FIRMA/FIRMAYETKILI/SEVKADRES/IL/ILCE/TELEFON/SIPARISTARIHI/SIPARISNO/SIPARISNOTU/GONDERIMSEKLI/KESIM/URUNCINSI/URUNKODU/URUNADI/ADET/BIRIM/METRE/TUTAR/”)
    ‘dataNodes = xmlDoc.SelectNodes(“//SIPARIS/*”)
    dataNodes = xmlDoc.SelectNodes(“//.”)
    ‘dataNodes1 = xmlDoc.SelectNodes(“//SIPARIS/SIPARISKALEMLERI/SIPARISKALEMI/URUNCINSI/URUNKODU/URUNADI/ADET/BIRIM/METRE/TUTAR/”)
    For Each aNode In dataNodes

    Try
    FIRMACARIKOD = aNode.ChildNodes.Item(0).InnerText
    FIRMA = aNode.ChildNodes.Item(1).InnerText
    FIRMAYETKILI = aNode.ChildNodes.Item(2).InnerText
    SEVKADRES = aNode.ChildNodes.Item(3).InnerText
    IL = aNode.ChildNodes.Item(4).InnerText
    ILCE = aNode.ChildNodes.Item(5).InnerText
    TELEFON = aNode.ChildNodes.Item(6).InnerText
    SIPARISTARIHI = aNode.ChildNodes.Item(7).InnerText
    SIPARISNO = aNode.ChildNodes.Item(8).InnerText
    SIPARISNOTU = aNode.ChildNodes.Item(9).InnerText
    GONDERIMSEKLI = aNode.ChildNodes.Item(10).InnerText
    KESIM = aNode.ChildNodes.Item(11).InnerText
    URUNCINSI = aNode.ChildNodes.Item(12).InnerText
    URUNKODU = aNode.ChildNodes.Item(13).InnerText
    URUNADI = aNode.ChildNodes.Item(14).InnerText
    ADET = aNode.ChildNodes.Item(15).InnerText
    BIRIM = aNode.ChildNodes.Item(16).InnerText
    METRE = aNode.ChildNodes.Item(17).InnerText
    TUTAR = aNode.ChildNodes.Item(18).InnerText
    MsgBox(FIRMACARIKOD)

    strInsertStmt = “INSERT INTO XMLSIPARIS (FIRMACARIKOD, FIRMA,FIRMAYETKILI, SEVKADRES, IL, ILCE, TELEFON, SIPARISTARIHI, SIPARISNO, SIPARISNOTU, GONDERIMSEKLI, KESIM, URUNCINSI, URUNKODU, URUNADI, ADET, BIRIM, METRE, TUTAR) VALUES (‘”
    strInsertStmt += FIRMACARIKOD + “‘,'” + FIRMA + “‘,'” + FIRMAYETKILI + “‘,'” + SEVKADRES + “‘,'” + IL + “‘,'” + ILCE + “‘,'” + TELEFON + “‘,'” + ” SIPARISTARIHI ” + “‘,'” + SIPARISNO + “‘,'” + SIPARISNOTU + “‘,'” + GONDERIMSEKLI + “‘,'” + KESIM + “‘,'” + URUNCINSI + “‘,'” + URUNKODU + “‘,'” + URUNADI + “‘,'” + ADET + “‘,'” + BIRIM + “‘,'” + METRE + “‘,'” + TUTAR + “‘)”
    sqlComm.CommandText = strInsertStmt
    sqlComm.ExecuteNonQuery()

    Catch e2 As Exception

    MsgBox(“Error: ” & e2.Message)

    End Try

    Next

    dbConn.Close()
    Else : MsgBox(“Database bağlantısı kurulamadı…”)
    End If

    Catch e1 As Exception
    MsgBox(“Error: ” & e1.Message)
    End Try
    End Sub

    Böyle yaptım ama bir sorun var .String dışındaki değerlerde hata veriyor ve sql e hiçbir kayıt atmıyor.

  5. yukarda gönderdiğim xml de düğümleri görünmüyor:Baştaki küçüktür işaretini kaldırıp ,görmeniz için göndermek istedim

    SIPARIS
    FIRMACARIKOD>2050198ELİFNiyazi SarıkayaŞehit Süleyman bey mah.No:42BALIKESİRBANDIRMA0212/44444414/08/2008
    SIPARISNO>35511
    SIPARISNOTU>
    GONDERIMSEKLI>Kargo
    KESIM>0
    SIPARISKALEMLERI>
    SIPARISKALEMI>
    URUNCINSI>İç Tül
    URUNKODU>80101476
    URUNADI>80101476
    ADET>1
    BIRIM>TOP
    METRE>6.00
    TUTAR>86.94
    /SIPARISKALEMI>
    /SIPARISKALEMLERI>
    /SIPARIS>

  6. INSERT INTO syntax’ı yazarken integer değişkenlerin başına ve sonuna tek tırnak yazılmaz. ”’,”’ olarak kullanmamalısın.

    örneğin INSERT INTO ya gelecek değerler sırasıyla Ali ve 23 olsun. O halde;
    xx=”Ali” ve yy=23 kabul edelim,

    strInsertStmt = “INSERT INTO XMLSIPARIS (isim,yas) VALUES (‘” + xx + “‘,” + yy + “)”

    gibi olur, Tırnak işaretlerinin sayısına dikkat edersen, farklı olduğunu görebilirsin.

  7. asset_rfid = aNode.ChildNodes.Item(1).InnerText

    burada değişkene yüklerken string ve integer olup olmadığı önemli değil. INSERT INTO syntx’ı oluşturuken kullandığın tırnak işaretleriyle, database’e doğru tür veriyi aldırabilirsin.

  8. Merhaba
    Söylediğiniz gibi INSERT INTO kısmını aşağıdaki gibi yaptım
    strInsertStmt = “INSERT INTO XMLSIPARIS (FIRMACARIKOD, FIRMA,FIRMAYETKILI, SEVKADRES, IL, ILCE, TELEFON, SIPARISTARIHI, SIPARISNO, SIPARISNOTU, GONDERIMSEKLI, KESIM, URUNCINSI, URUNKODU, URUNADI, ADET, BIRIM, METRE, TUTAR) VALUES (”
    strInsertStmt += FIRMACARIKOD + “,'” + FIRMA + “‘,'” + FIRMAYETKILI + “‘,'” + SEVKADRES + “‘,'” + IL + “‘,'” + ILCE + “‘,'” + TELEFON + “‘,'” + ” SIPARISTARIHI ” + “‘,'” + SIPARISNO + “‘,'” + SIPARISNOTU + “‘,'” + GONDERIMSEKLI + “‘,” + KESIM + “,'” + URUNCINSI + “‘,'” + URUNKODU + “‘,'” + URUNADI + “‘,” + ADET + “,'” + BIRIM + “‘,” + METRE + “,” + TUTAR + “)”
    ve
    dataNodes = xmlDoc.SelectNodes(“//SIPARIS/*”) olarak programı çalıştırdığımda

    Error:Object reference not set to an instance of an object hatası veriyor.Ok tıkladıktan sonra ikinci alan olan Firma alanını xmlden okuyor.
    Error:Conversion from string “ELİF” to type ‘İnteger’ is not valid.
    bu hatayı string alanların hepsinde alıyorum.integer alanlarda da Error:Object reference not set to an instance of an object bu hatayı veriyor.
    Xml sayfasında endışda sipariş tagı var onun altında tek tek taglar ve sonra blok halinde SIPARISKALEMLERI>
    SIPARISKALEMI> tagları içinde tek taglar ve ensondada SIPARISKALEMLERI>
    SIPARISKALEMI>
    SIPARIS> ŞEKLİNDE taglar kapanıyor.Sipariş kalemi tagına geldimi alttaki tagları tek bir satır şeklinde almış gösteriyor ve program bitiyor,database e kayıt yok yine
    Programda
    dataNodes = xmlDoc.SelectNodes(“//SIPARIS/*”) eksikmi yazıyorum.Onun yerine ne yazmalıyım.

  9. Yukarda gönderdiğim yazıda kafana takılan birşey daha var.
    VALUES (”
    strInsertStmt += FIRMACARIKOD + “,
    Söylediğiniz gibi integerda ‘ tek tırnakları kaldırdım ama yukarda yadzığım kısımda strInsertStmt string,FIRMACARIKOD integer ben bu kısımda tek tırneğı kaldırdım burdan kaynaklı sorunmu yaşıyorum ama bu alana sonra ‘ tırnak yerleştirip çalıştırdım yine aynı hatayı alıyorum

  10. Sorun veritabanında olabilir. Veritabanındaki alanların tiplerini kontrol edin. Ayrıca yukarıda tarih alanı + ” SIPARISTARIHI ” + yanlış bir sözdizimi olmuş.

  11. Programda
    dataNodes = xmlDoc.SelectNodes(”//SIPARIS/*”) eksikmi yazıyorum.Onun yerine ne yazmalıyım.

  12. Merhaba birtek datanodes kısmı kaldı.Aşağıda örnek göndereceğim xml’in
    dataNodes = “/SIPARIS/SIPARISKALEMLERI/SIPARISKALEMI”)kısmını nasıl tanımlamalıyım.Böyle yaptığımda
    Error:Object reference not set to an instance of an object
    Veri tabanındaki ve programdaki bütün değişkenleri string yaptım,xml’i tek sipariş noduna düşürdüğümde sqle atıyorum Ama içinde alta doğru SIPARISKALEMLERI ve SIPARISKALEMI şeklinde 2 node daha var.datanodes u nasıl tanımlamalıyım

    SIPARIS>
    FIRMACARIKOD>2050198ELİF NevzatŞehit Süleyman . No:10ANKARABANDIRMA0266/755603014/08/200835511XXKargo0
    SIPARISKALEMI>
    URUNCINSI>İç KESİM80101476801014761TOP6.0086.94
    /SIPARISKALEMLERI>
    /SIPARIS>

  13. SIPARIS>
    FIRMACARIKOD>2050198
    FIRMA>ELİF
    FIRMAYETKILI>Nevzat
    SEVKADRES>Şehit MAH
    IL>BALIKESİR
    ILCE>BANDIRMA
    TELEFON>0215/7183030
    SIPARISTARIHI>14/08/2008
    SIPARISNO>35511
    SIPARISNOTU>XX
    GONDERIMSEKLI>Kargo
    KESIM>0
    SIPARISKALEMLERI>
    SIPARISKALEMI>
    URUNCINSI>İç Kesim
    URUNKODU>80101476
    URUNADI>80101476
    ADET>1
    BIRIM>TOP
    METRE>6.00
    TUTAR>86.94
    /SIPARISKALEMI>
    /SIPARISKALEMLERI>
    /SIPARIS>

  14. Sanırım çalıştığın .XML dosyasını yapısındada bir problem var. Aldığın son hata bundan kaynaklanıyor olabilir. Mesela ile başlayan node, kapanmamış. açtığın he nodu kapatmalısın. .XML dosyanı yukarıda verdiğim örnek .XML dosyasıyla karşılaştırmanda fayda var.

  15. Merhaba
    Siz örneğinizde dataNodes = xmlDoc.SelectNodes(”/aa/bb”)
    böyle tanımlamışsınız.Benim xml dosyamda
    SIPARIS node u var içinde içinde firma bilgilerinin olduğu tablar var.Sonra
    SIPARISKALEMLERI nodu var.hemen altında SİPARİŞ KALEMİ nodu var.Bu nodun içinde sipariş detayları var.Her bir sipariş kaleminin detayının bitiminde SİPARİŞ KALEMİ nodu kapanıyor .Sipariş kalemleri bittiğinde SIPARISKALEMLERI nodu kapanıyor.Ensonda SIPARIS nodu kapanıyor.Böyle bir xml i okurken dataNodes = xmlDoc.SelectNodes(”/aa/bb”)
    kısmını nasıl tanımlamalıyım

  16. FIRMACARIKOD>2050198
    FIRMA>ELİF
    FIRMAYETKILI>Nevzat
    SEVKADRES>Şehit MAH
    IL>BALIKESİR
    ILCE>BANDIRMA
    TELEFON>0215/7183030
    SIPARISTARIHI>14/08/2008
    SIPARISNO>35511
    SIPARISNOTU>XX
    GONDERIMSEKLI>Kargo
    KESIM>0

    Yukarıdaki node’ları çıkararak deneyin bakalım. Sanırım sorun, .xml dosyasında, tekrarlayan node’ların dışında tutulan sabit node’ların oluşu. Sizin xml dosyanızda yukarıdaki başlık bilgileri statik, Sipariskalemleri tekrarlayan node olarak gözüküyor. Söylediğim gibi deneyin bakalım istediiniz noda ulaşabilecek misiniz.

  17. Xmli böyle yaptığımda bilgilere ulaşıyorum.Ama sipariş kalemleri gibi tekrarlayan nodeları nasıl yapmalıyım.
    Birde sizin örneğinizde ki gibi xml den veriyi okuduktan sonra,örneğin asset_name değişkenini aynı databasede farklı bir tablodaki bir alanla karşılaştırıp orda bulduğum bir sonucu asset_rfid değişkenine atıp strInsertStmt stringini oluşturmak istiyorum.Bunu nasıl yapabilirim küçük bir örnek verebilirmisiniz.yardımlarınız için tşk

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.