08 December 2016

XML Dosyasından Veritabanına Kayıt İşlemi

Web.config dosyasına connectionstring yazalım:

<configuration>
  <connectionStrings>
    <add name="CdConn" connectionString="server=.;database=cdler;trusted_connection=true"/>
  </connectionStrings>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>

</configuration>

Uygulamamamızda bir adet xml dosyasından veritabanına kayıt işlemini yapacağız. Bunun için ayrı Entity-Facade classlarımızı oluşturalım.

CD.cs class’ı içeriği:

public class CD
    {
        public int CDID { get; set; }
        public string Title { get; set; }
        public string Artist { get; set; }
        public string Country { get; set; }
        public string Company { get; set; }
        public double Price { get; set; }
        public int Year { get; set; }
    }

Property’leri tanımladık. Şimdi DBContext.cs içerisine gereken metodları tanımlayalım:

SqlConnection sqlcon;
        public DBContext()
        {
            sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["CdConn"].ConnectionString);
        }

        public void UrunEkle(string path)
        {
            XmlDocument xdoc = new XmlDocument();
            xdoc.Load(path);
            XmlNodeList lists = xdoc.SelectNodes("catalog/cd");

            foreach (XmlNode node in lists)
            {
                CD c = new CD();
                c.Title = node.SelectSingleNode("title").InnerText;
                c.Artist = node.SelectSingleNode("artist").InnerText;
                c.Country = node.SelectSingleNode("country").InnerText;
                c.Company = node.SelectSingleNode("company").InnerText;
                c.Price = Convert.ToDouble(node.SelectSingleNode("price").InnerText);
                c.Year = Convert.ToInt32(node.SelectSingleNode("year").InnerText);

                SqlCommand sqlcmd = new SqlCommand("InsertCd", sqlcon);
                sqlcmd.CommandType = CommandType.StoredProcedure;

                sqlcmd.Parameters.AddWithValue("@title", c.Title);
                sqlcmd.Parameters.AddWithValue("@artist", c.Artist);
                sqlcmd.Parameters.AddWithValue("@country", c.Country);
                sqlcmd.Parameters.AddWithValue("@company", c.Company);
                sqlcmd.Parameters.AddWithValue("@price", c.Price);
                sqlcmd.Parameters.AddWithValue("@year", c.Year);

                sqlcon.Open();
                sqlcmd.ExecuteNonQuery();
                sqlcon.Close();
            }

        }

        /// <summary>
        /// Parametre olarak CD objesi alıp veritabanına kaydeder
        /// </summary>
        /// <param name="c">CD tipinde bir parametre giriniz</param>
        public void UrunEkle(CD c)
        {

            SqlCommand sqlcmd = new SqlCommand("InsertCd", sqlcon);
            sqlcmd.CommandType = CommandType.StoredProcedure;

            sqlcmd.Parameters.AddWithValue("@title", c.Title);
            sqlcmd.Parameters.AddWithValue("@artist", c.Artist);
            sqlcmd.Parameters.AddWithValue("@country", c.Country);
            sqlcmd.Parameters.AddWithValue("@company", c.Company);
            sqlcmd.Parameters.AddWithValue("@price", c.Price);
            sqlcmd.Parameters.AddWithValue("@year", c.Year);

            sqlcon.Open();
            sqlcmd.ExecuteNonQuery();
            sqlcon.Close();
        }

Webform1.aspx.cs kısmında 2 şekilde veri kayıt işlemini gerçekleştirebiliriz.

Birinci yöntem:

DBContext db = new DBContext();
protected void Page_Load(object sender, EventArgs e)
        {
            //1. yöntem
            db.UrunEkle(Server.MapPath(@"XmlData\CdCollection.xml"));

        }

İkinci yöntem:

void XmltoCd()
        {
            DataSet ds = new DataSet();
            ds.ReadXml(Server.MapPath(@"XmlData\CdCollection.xml"));
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                CD c = new CD();
                c.Title = row[0].ToString();
                c.Artist = row[1].ToString();
                c.Country = row[2].ToString();
                c.Company = row[3].ToString();
                c.Price = Convert.ToDouble(row[4].ToString());
                c.Year = Convert.ToInt32(row[5].ToString());

                db.UrunEkle(c);
            }
        }


        protected void Page_Load(object sender, EventArgs e)
        {

            //2. yöntem
            XmltoCd();
        }