1

Konu: c# da xml dosyasını sql servera aktarmak

xml deki datayı sql servera yazmam gerekiyor
dili bilmemek çok kötü gerçekten
allta bunu yaptım düzgün de çalışıyor.   ama mantığı saçma geldi
mutlaka daha mantıklı yolu vardır diye düşünüyorum

bu kodu optimize edebilirmisiniz.

kisaca şöyle
hasta.xml den   h_protokol , h_isim , h_ad , h_soyad , h_ceptel , h_tel1 , h_tel2 , h_tel3 , h_tel4 
elemanlarını sıra ile okuyorum  sıra  h_email  e geldiğinde hemen sonra gidip sql servera yazıyorum

şimdiden teşekkürler




using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Data.SqlClient;

namespace drorgdis
{
    public partial class xmltosqlserver : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        string sonkayit;

        protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn1 = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnStr_alp"].ToString());
            conn1.Open();

            XmlTextReader xmld = new XmlTextReader(@"C:\\hasta.xml");
            try
            {
                while (xmld.Read())
                {
                    if (xmld.NodeType == XmlNodeType.Element)
                    {
                        sonkayit = "hayir";
                        switch (xmld.Name)
                        {
                            case "h_protokol":                                 
                                TextBox1.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_isim":                                 
                                TextBox2.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_ad":                               
                                TextBox3.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_soyad":                               
                                TextBox4.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_ceptel":                               
                                TextBox5.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_tel1":                               
                                TextBox6.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_tel2":                       
                                TextBox7.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_tel3":                           
                                TextBox8.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_tel4":                               
                                TextBox9.Text = Convert.ToString(xmld.ReadString().Trim());
                                break;
                            case "h_email":
                                sonkayit = "evet";
                                TextBox10.Text = Convert.ToString(xmld.ReadString().Trim());                               
                                break;
                        }
                        if (sonkayit == "evet")
                        {
                            string komut = @" insert into  hasta (protokol,isim,ad,soyad,ceptel,tel1,tel2,tel3,tel4,email) values (@protokol,@isim,@ad,@soyad,@ceptel,@tel1,@tel2,@tel3,@tel4,@email)";
                            SqlCommand cmd2 = new SqlCommand(komut, conn1);

                            cmd2.Parameters.AddWithValue("@protokol", TextBox1.Text.Trim());
                            cmd2.Parameters.AddWithValue("@isim", TextBox2.Text.Trim());
                            cmd2.Parameters.AddWithValue("@ad", TextBox3.Text.Trim());
                            cmd2.Parameters.AddWithValue("@soyad", TextBox4.Text.Trim());
                            cmd2.Parameters.AddWithValue("@ceptel", TextBox5.Text.Trim());
                            cmd2.Parameters.AddWithValue("@tel1", TextBox6.Text.Trim());
                            cmd2.Parameters.AddWithValue("@tel2", TextBox7.Text.Trim());
                            cmd2.Parameters.AddWithValue("@tel3", TextBox8.Text.Trim());
                            cmd2.Parameters.AddWithValue("@tel4", TextBox9.Text.Trim());
                            cmd2.Parameters.AddWithValue("@email", TextBox10.Text.Trim());

                            int donenkayitsayisi = cmd2.ExecuteNonQuery();
                            if (donenkayitsayisi > 0)
                            { Response.Write("kayıt edildi "); }
                            else
                            { Response.Write("kayıt edilmedi"); }
                        }
                    }
                }                           
            }
            catch (Exception ex)
            { Response.Write("Xml e bağlanamadım : " + ex.Message); }
            xmld.Close();
            conn1.Close();
        }

        }
    }

xml dosyasi   hasta.xml 
********************
  <?xml version="1.0" encoding="Windows-1254" standalone="yes" ?>
- <VFPData>
- <xsd:schema id="VFPData" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xsd:element name="VFPData" msdata:IsDataSet="true">
- <xsd:complexType>
- <xsd:choice maxOccurs="unbounded">
- <xsd:element name="ghasta" minOccurs="0" maxOccurs="unbounded">
- <xsd:complexType>
- <xsd:sequence>
- <xsd:element name="h_protokol">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="10" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_isim">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="40" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_ad">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="20" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_soyad">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="20" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_ceptel">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="10" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_tel1">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="20" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_tel2">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="20" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_tel3">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="20" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_tel4">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="20" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
- <xsd:element name="h_email">
- <xsd:simpleType>
- <xsd:restriction base="xsd:string">
  <xsd:maxLength value="40" />
  </xsd:restriction>
  </xsd:simpleType>
  </xsd:element>
  </xsd:sequence>
  </xsd:complexType>
  </xsd:element>
  </xsd:choice>
  <xsd:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="lax" />
  </xsd:complexType>
  </xsd:element>
  </xsd:schema>
- <ghasta>
  <h_protokol>0066117</h_protokol>
  <h_isim>Abdulkadir Çimen</h_isim>
  <h_ad>Abdulkadir</h_ad>
  <h_soyad>Çimen</h_soyad>
  <h_ceptel>5134847051</h_ceptel>
  <h_tel1>İş 0212 474 19 00</h_tel1>
  <h_tel2>İş 0212 310 75 49</h_tel2>
  <h_tel3>Cep 0532 484 70 51</h_tel3>
  <h_tel4>Ev 0552 273 89 25</h_tel4>
  <h_email>abdulkadir@suddbora1.com</h_email>
  </ghasta>
- <ghasta>
  <h_protokol>0107762</h_protokol>
  <h_isim>Abdullah Ergen</h_isim>
  <h_ad>Abdullah</h_ad>
  <h_soyad>Ergen</h_soyad>
  <h_ceptel>5359257014</h_ceptel>
  <h_tel1>Ev 0212 428 41 11</h_tel1>
  <h_tel2>Cep 0532 925 70 01</h_tel2>
  <h_tel3>Ev 0552 273 89 21</h_tel3>
  <h_tel4>Ev 0552 273 89 21</h_tel4>
  <h_email>palidrom11@hotmail.com</h_email>
  </ghasta>
  </VFPData>

2

Re: c# da xml dosyasını sql servera aktarmak

Ne zaman C# da data ile ilgili soru gorsem aklima sarki geliyor

Linq, Linq, Linq, Linq oy oy oy Linq smile Linq To SQL kullanarak:

C#
using System.Linq;

using System.IO;
using System.Xml.Linq;
 
namespace DataOrnek
{
    class Program
    {
        static void Main(string[] args)
        {
            HastalarDataContext db = new HastalarDataContext(
                @"server=.\SQLExpress;Trusted_Connection=yes;database=test");
 
            string xml = File.ReadAllText(@"c:\hasta.xml");
 
            var hastalar = from h in XElement.Parse(xml).Descendants("ghasta")
                           select new hasta
                           {
                               protokol = (string)h.Element("h_protokol"),
                               isim = (string)h.Element("h_isim"),
                               ad = (string)h.Element("h_ad"),
                               soyad = (string)h.Element("h_soyad"),
                               ceptel = (string)h.Element("h_ceptel"),
                               tel1 = (string)h.Element("h_tel1"),
                               tel2 = (string)h.Element("h_tel2"),
                               tel3 = (string)h.Element("h_tel3"),
                               tel4 = (string)h.Element("h_tel4"),
                               email = (string)h.Element("h_email")
                           };
            db.hastas.InsertAllOnSubmit(hastalar);
            db.SubmitChanges();
        }
    }
}

http://cetinbasoz.spaces.live.com/blog

adresinde bircok ornek ve biraz VFP bakisiyla Linq var -ama Ingilizce:(

3

Re: c# da xml dosyasını sql servera aktarmak

çok sağol..
ben yukardaki kodu yarım günde yazdım
muhtmelen sende 10-15  dakikada

ben tabii yeni öğreniyorum
çalıştığım kitaplar , web deki örneklerin çok büyük bir kısmı linq içermiyor. onun için sql ile boğuşuyorum
1-2 yıla kadar muhtemelen temel bilgileri öğrenmiş olurum
tabii bu arada microsoft yeni bir şeyler  çıkarmazsa.....

4

Re: c# da xml dosyasını sql servera aktarmak

Yeni başlayan arkadaşlar varsa onlara yardımcı olacak bir kaç bilgi .
HastalarDataContext  nasıl oluşur ?
Projenin üzerinde  iken  mousun sağ tuşu   " add new item"   oradan   "linq to sql class  " uygulaması seçilir.
bu dosyanın adı "Hastalar.dbml"  ismi ile kaydedilir.
Hangi table ile çalışılıyorsa  o table açılan ekrana drag drop yapılır.   
"Hastalar.dbml"  dosyası nı kaydet
sonra kodlara dönüp işlem yapılabilir.

5

Re: c# da xml dosyasını sql servera aktarmak

Linq eski kaynaklarda yok, yenilerde de az cunku kendisi kismen yeni. .Net 3.5'tan beri var. Dataset kullanmaya aliskin olanlar Linq'a karsi baya bi dirence gosteriyor, o nedenle de daha az bulunuyor. Ancak isin gercegi MS acisindan verinin gelecegi Linq'da geciyor (ne cikarsa ciksin, altinda Linq olan teknolojiler oluyor). MS tabii ki yeni seyler cikariyor ve bunun icin ben kizmiyorum, aksine hayati benim icin kolaylastirdigini dusunuyorum - (kim ne derse desin yakinda betasi cikacak olan VS LightSwitch bence harika). Linq + Silverlight sanki hem masaustu hem web hem de mobil (kisacasi her turlu) oratmlarin gelecegi gibi gorunuyor.

Linq'nun bir diger avantaji .Net 4'te kolaylikla paralel task kullanabilmesi (mesela dual CPU'un varsa ayni sorgu %50 cvarinda hizlaniyor, 4 ise daha fazla ...). Yakin gelecekte isin icine Dryad Linq'da girecek o zaman milyar seviyesindeki veriden 1sn gibi surelerde cevap alinacagi ongoruluyor. Uzun lafin kisasi ben veri islemlerinde Linq kullanmani oneririm. Zaten LINQ kisaltmasinin acilimi "Language INtegrated Query - Dile Entegre Sorgu". WCF RIA services vs hep onu kullaniyor.

Not: Metin Blogu Turkce yazmami onermisti ama o zaman benim icin iki dilde yazmak demekti ve gercekten tek bir girisi yazmak bile cok zaman aliyordu. Oyle yapamadigim icin uzgunum. Aklimda yazacak cok sey var ama yazmaya zaman yok:(
Dun gece cok gec saatlerde mesajini gorup yazdim onu, yoksa dbml yaratma kismi dahil video kaydedip yukeleycektim, neyseki sen yapmissin:)

6

Re: c# da xml dosyasını sql servera aktarmak

LightSwitch i izlerken aklıma ms access geldi onların çoğunu o da yapıyordu zamanında  ve arkada vb kod üretiyordu.
bugün bir kaç ADO.NET Entity Framework  video su izledim o da ilginç
linq yu biliyoruz zaten

bunların hepsini birden düşündüğünde microsoft karmaşık
database işlemlerini kolaylaştıracak yollar arıyor gibi geliyor bana

ilginç olan çoğu çıkan yenilik ve döküman hep microsoft tarafında
diğer firmalarda çok hareket yok gibi yada biz görmüyoruz
web sitelerini gezerken bazı sitelerde microsoftun linq to sql daha
geliştirmeyeceği yazıyor bilmiyorum size denk geldi mi?

türkçe yazmakla ilgili
bilgisayar dünyasında çok hızlı değişimler oluyor yeni yeni kavramlar
çıkıyor bunların hepsine Türkçe isimler bulmak çok kolay değil microsoft tun
adım adım kitaplarında bu çok açık görülüyor bir Türkçe kelime yazmış ne
olduğunu çözmek için uğraşıyorsun. onun yerine İngilizce sini yazsa belki
daha kolay öğreneceğiz.
özellikle bu hızdaki teknoloji ye Türkçe dilinin yetişmesi imkansız bence

7

Re: c# da xml dosyasını sql servera aktarmak

Linq to SQL'in (L2S) daha fazla gelistirmeyecegi konusunda yazilar cikti ama dogru da cikmadi. Yalan cikti demek de dogru degil, cunku MS acik acik Linq to Entity Framework'a (L2E) en fazla agirligi verecegini belirtti. L2E'nin avantaji backend nötral olmasi. EF provider'i olan her backendle calisiyor ve sen gercekten sadece connection string degistiriyorsun (VFP'de SPT ya da CA ile oyle degil mesela, sen ayni zamanda backend'e ozel SQL yazmak zorundasin). L2S'in en buyuk avantaji EF'e nazaran daha kolay ve hizli ama sadece SQL server'a ozel. Sonucta pek birsey farketmiyor, yukaridaki kodda 2-3 satir degistirince L2E oluyor.

8

Re: c# da xml dosyasını sql servera aktarmak

cetinbasoz yazdı:

...
Not: Metin Blogu Turkce yazmami onermisti ama o zaman benim icin iki dilde yazmak demekti ve gercekten tek bir girisi yazmak bile cok zaman aliyordu. Oyle yapamadigim icin uzgunum. Aklimda yazacak cok sey var ama yazmaya zaman yok:(
Dun gece cok gec saatlerde mesajini gorup yazdim onu, yoksa dbml yaratma kismi dahil video kaydedip yukeleycektim, neyseki sen yapmissin:)

bence ingilizce yazmana gerek yoktu. ingilizce zaten kaynak fazlasıyla var. türkçe adam gibi kaynak yok. ingilizcesi zayıf arkadaşlar için iyi olurdu. hoş bence bir bilgisayar programcısı ingilizce okuma-yazma bilmeli mutlaka, bilmemesi büyük eksikliktir ama malesef ülkemizde dil konusu hala yeterince önemsenmiyor.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

9

Re: c# da xml dosyasını sql servera aktarmak

en azından okuduğunu anlamak şart
yazılım işinde dökümanların çok büyük kısmı ingilizce
ingilizce yabancı dil olmaktan çıkıp artık uluslararası anlaşma biçimi olmaya başladı.

10

Re: c# da xml dosyasını sql servera aktarmak

metin yazdı:


bence ingilizce yazmana gerek yoktu. ingilizce zaten kaynak fazlasıyla var.

Desene ben o yeteri kadar kaynaktan birisine denk gelememisim:) Nerede var? Help'i kastediyorsan MS zaten onun Turkcesini yayinliyor, anlayan beri gelsin.

11

Re: c# da xml dosyasını sql servera aktarmak

microsoftun türkçe kitaplarında ki dil çok kötü .
yazılım da ki gelişim son 10 yılda çok hızlandı.
türkçe dilinin buna yetişmesi çok zor.
yeni çıkan kavramlara herkesin üzerinde anlaşacağı türkçe kelime bulmak  çok zor.
sen bulana kadar yeni bir kavram çıkıyor veya o kavram eskimiş oluyor.
Bunun en kolayı ve mantıklısı bence orjinal kelimeyi kullanmak .
yoksa microsof tun kitaplarında kullandığı gibi kelimeler işin anlaşılmasını zorlaştırıyor.

bence linq için yeterince ingilizce kaynak yok.( türkçe hiç yok)   

Özellikle asp.net i iyi bilenler Linq u yaşamlarına tam sokmadılar gibi geliyor. insanlar alışkanlıklarını kıramıyorlar gibi geliyor.

12

Re: c# da xml dosyasını sql servera aktarmak

Soz meclisten disari, biraz once LightSwitch'in videolarindan birini daha izledim ve resmen asik oldum. 23 agustos gelse de su betayi elimize alabilsek.
Ozetle videodan anladigim carpici ozellikler:
-Silverlight temel alt yapi. Ayni anda web, desktop, mobil'e ve hatta normal, multitouch ortamlara yaziyorsun.
-3 katmanli yapi ( a) Kullanici arayuzu, b) orta katman - middle tier, uygulama mantiginin oldugu kisim, c) Veritabani erisimi ). Yeni (sayilir) MVVM paternini uyguluyor - Model, View, ViewModel.
-Kontrolleri kendi yazdigimiz kontrollerle degistirebiliyoruz ( Textbox yerine myTextbox gibi ama bunda ne varki demeden once altinda Silverlight oldugunu dusunun).
-Runtime'da interaktif ekran dizayni!!!! Iste benim favorim. Bu is IDE'de "do form" yapmisken ekrandaki kontrolleri degistirmeye benziyor.
-Degisik veri kaynaklarina baglanmak cok kolay (VFP'de de diyebilmek isterdim - VFP'de en yakin CursorAdapter var o da yetersiz ve hic de kolay degil)

Cok kolay, o nedenle programlama bilmeyenler de kullanabilecek (bunun iyi mi kotu mu oldugu beni asar)

13

Re: c# da xml dosyasını sql servera aktarmak

bu microsoft program geliştirme tool larından eminim çok zarar ediyordur. dolaylı yoldan para kazanıyor.
esas parayı sql server,office,işletim sisteminden kazanıyor.
program geliştirme toollarını yukarıdaki 3 ürününün yerini sağlamlaştırmak için kullanıyorlar.

http://www.microsoft.com/showcase/en/us … fa18bd5204
adresindeki videoyu izledim belki senin izlediğin de buydu 
gerçekten dedikleri gibiyse sadece bir ortama yazıyorsun her  yerde çalışıyor.

bir forumda foxpro desteği varmı diye soruyorlardı şimdilik yok planda da yok gibi laf vardı.
http://social.msdn.microsoft.com/Forums … al/threads (hemen daha ürün gelmeden forum u da açmışlar)

hep kendi ürünlerini destekliyecek iş yapıyorlar
demoda direk excel e data atmak , sql server ve share point ile direk iletişimi gösterdi

gerçekten bunlar zamanında access in yaptığını şimdi  visual studio ya uyguluyorlar
inşallah ekmeğimizden olmayız.

hiç program bilmeyen birini 6-7 yıl önce access  ile database uygulaması yaparken gördüğümde çok şaşırmıştım.
bu onun daha profesyonel hali gibi geldi .

14

Re: c# da xml dosyasını sql servera aktarmak

cetinbasoz yazdı:
metin yazdı:


bence ingilizce yazmana gerek yoktu. ingilizce zaten kaynak fazlasıyla var.

Desene ben o yeteri kadar kaynaktan birisine denk gelememisim:) Nerede var? Help'i kastediyorsan MS zaten onun Turkcesini yayinliyor, anlayan beri gelsin.

ben c# konusunda bir senin tavsiye ettiğin ingilizce kitap ve senin blog dışında başka kaynak okumadım ama bu kadar popüler bir dil hakkında doğru düzgün kaynak yok mu diyorsun? gerçekten şaşırdım. c# ın helpini bilmem ama vfp'nin helpi harika. gerçekten çok öğretici. delphi'nin bir help'ini gördüm berbat bişeydi.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

15

Re: c# da xml dosyasını sql servera aktarmak

Linq konusunda bildigim kadariyla o tip bir kaynak yoktu. Kitaplar vardi (birkac tane) ama onlarda minimum 600 sayfa civarinda. Ben daha cok kisa, oz ve VFP'den gelenlerin anlayabilecegi birsey yapmak istemistim.