none
ASP.NET MVC'de çalışma anında oluşturulan tablodan verileri nasıl çekebilirim? RRS feed

  • Soru

  • Merhabalar;

    Öncelikle bir Context oluşturdum. ADO.NET Entity Datayla oluşturulmuş Model'den kalıtım alıyor. Ve bu context'te bir tablo ve bir satır ekleme metodları var. Herşey güzel çalşıyor ama tabloyu listeleme kısmını yapamadım.

    Tablo ekleme class;

    using imeceASPNET.Models;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Runtime.Remoting.Contexts;
    using System.Web;
    
    namespace imeceASPNET.Classes
    {
        public class Context : imeceASPNET.Models.Model1
        {
    
        }
        public class AddTable
        {
            Model1 md = new Model1();
            public void addTable(string musteriAdi, int invoiceId)
            {
                string a = musteriAdi.Replace(" ", string.Empty);
                string sqlCommandTableCreate = "CREATE TABLE " + a + "PayPlain" + invoiceId + "( ID INTEGER PRIMARY KEY IDENTITY(1,1), InvoiceId INTEGER, PayPlain NVARCHAR(MAX))";
                var addTableContext = new Context();
                addTableContext.Database.ExecuteSqlCommand(sqlCommandTableCreate);
            }
    
            public void addRow(string musteriAdi, string payPlain, int invoiceId)
            {
                string a = musteriAdi.Replace(" ", string.Empty);
                string cmdString = "INSERT INTO " + a + "PayPlain" + invoiceId + "(InvoiceId,PayPlain) VALUES (" + invoiceId + ",'"+payPlain+"')";
                var context = new Context();
                context.Database.ExecuteSqlCommand(cmdString);
            }
    
            public void getPayPlain(int invoiceId, string musteri)
            {
                string a = musteri.Replace(" ", string.Empty);
                string cmd = "SELECT * FROM "+a+"PayPlain"+invoiceId+" WHERE InvoiceId=" + invoiceId;
                var context = new Context();
                context.Database.ExecuteSqlCommand(cmd);
            }
        }
    }

    ActionResult;

     public ActionResult getPayPlains(int invoiceId, string musteri)
            {
                AddTable at = new AddTable();
                at.getPayPlain(invoiceId, musteri);
                return View();
            }
    

    View;

    @model imeceASPNET.Classes.AddTable
    @{
        ViewBag.Title = "getPayPlains";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    

    Kısaca veitasbanına sonradan eklenen bir tablo var ve içinde veri var. Bu verileri Model gibi nasıl listeletebilirim?

    8 Ekim 2016 Cumartesi 09:36

Yanıtlar

  • Sen olayı biraz yanlış anlamışsın galiba... her Adi müşterin ya da fatura için için runtime da yeni bir tablo yapmana gerek yok. :) En baştan yap tüm adi müşterileri buna kaydet.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    8 Ekim 2016 Cumartesi 18:42
    Moderatör
  • Sorunuzun cevabı tablo yapınızda.

    http://pgnchess.com
    http://dergikapaklari.com

    • Yanıt Olarak İşaretleyen falan_filan 11 Ekim 2016 Salı 09:16
    10 Ekim 2016 Pazartesi 22:33
    • Taksitleri database'e kaydetmene gerek yok!
    • Satış tarihi belli bunu kaydet, taksit sayısı belli bunu kaydet, satılan ürünler, fiyatları ve miktarları da belli buları da kaydet.
    • İstediğin yerde istediğin zaman, database'e gerek kalmadan bir döngü ile taksitleri ve ödemeleri gösterebilirsin.
    • Taksit tablosu soyut bişey.

    @for(var i = 0; i < satış.TaksitSayısı; i++)
    {
       <tr>
          <td>@satış.Tarih.AddMonths(i).ToString("MMMM yyyy")</td>
          <td>@((satış.Ürünler.Sum(p=>p.Fiyat * p.Miktar) / satış.TaksitSayısı).ToString("c2"))</td>
          <td>@satış.Ödemeler.OrderBy(p=>p.Tarih).Take(i+1).Last().Mitar.ToString("c2")</td>
       <tr>
    }


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com






    11 Ekim 2016 Salı 05:57
    Moderatör

Tüm Yanıtlar

  • up!
    8 Ekim 2016 Cumartesi 16:33
  • Sen olayı biraz yanlış anlamışsın galiba... her Adi müşterin ya da fatura için için runtime da yeni bir tablo yapmana gerek yok. :) En baştan yap tüm adi müşterileri buna kaydet.

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    8 Ekim 2016 Cumartesi 18:42
    Moderatör
  • haklısın Önay abi fakat şöyle düşündüm;

    müşterinin kaç taksit yaptıracağı belli değil burada. yani 10 taksit de yaptırabilir 5 taksit de. istek geldiğinde tablo oluşturup taksit sayısı kadar row ekliyorum. sonra da o rowları güncelliyorum. ya da son haliyle tek bir row ekleyip tüm taksit ve tutar bilgisini... tabi ya :D bunu runtimeda oluşturmama gerek yok. yazarken aklıma geldi. tamam hallettim. teşekkürler :))

    8 Ekim 2016 Cumartesi 19:22
  • (Ben bunlari soyleyince kotu adam oluyorum, firca yiyorum ama olsun)

    Bu sekilde parametresiz kodlari asla gercek bir uygulamada kullanma.

    9 Ekim 2016 Pazar 19:48
  • Siz, işi bilenlerin, büyüklerin başımız üstünde yeri var. Fakat bazen günlerce uğraştığımız oluyor, bilmediğimizden yapamadığımız oluyor, aklımıza gelmediğinden yapamadığımız oluyor. oluyor bir şekilde ve son çare buraya başvurarak medet umuyoruz. ama bazen üslup çok başka oluyor. ve ters tepki oluşuyor. benim de başıma geldi. bazen ukalaca bir hareket olarak gelebiliyor. bazen düşünüyoruz yardım etmeyecekseniz yazmayın diye. o an o şekilde aklına geliyor insanın. sonuçta bu forum yardım etme amaçlı ama öyle ama böyle. ama yine de bazen yazılanlar ağır gelebiliyor. sonuçta günlerce harcanan bir emek oluyor ya da başka bir şey. buradan medet umuluyor. buradan da bi şey çıkmayınca o anki ruh hali çok başka şekilde olabiliyor. burada kimse kimseyi bilmediklerinden dolayı aşağılayamaz. bilmiyor çünkü. ben siz ya da Önay abi aşağılıyorsunuz demiyorum. burada yeniyim. kimseyi tanımam etmem. bi şeyler öğrenmek, bildiklerimle bi şeyler yapmak istiyorum. bilmediklerimi de buradan öğrenmeye çalışıyorum. tecrübe bi şeyler yapılarak kazanılan bi şey. o yüzden hem sizin hem de bizim yazdıklarımız hoş görülmeli diye düşünüyorum. olay hakarete gitmediği sürece.

    neyse konuyu çok dağıttım içimden gelenler bunlardı.

    ben bir soru sormak istiyorum yaptığım şeyle alakalı. adam aldığı ürüne 12 taksit yaptırdı ve bunların aylık ödemelerini tutacağım bir tabloyu nasıl oluşturabilirim? tarihini, tutarını.. 6 taksit de yaptırabilir, 24 taksit de.. sonuçta taksit değişken bir şey. bunu tek bir row'a kaydedip  textarea içinde gösterdim ama çok sağlıklı olmadığını düşünüyorum. hem görünüm açısından, hem de güven açısından. nasıl çözebilirim bu durumu?

     
    10 Ekim 2016 Pazartesi 21:17
  • Sipariş ya da ödeme artık nasıl bir yapınız var ise ödeme ile ilgili tabloya taksit sayısı diye bir alan eklersiniz.

    Taksitleri tabloda tutmak istiyorsanız. Alışverişin yapıldığı tarihten itibaren tarihe 30 gün ekleyip cumartesi-pazara denk geliyor mu kontrol edersiniz. Cmt-pzr ise bir sonraki pzt'yi bulup taksit ödeme günü olarak kaydedersiniz. Bu şekilde taksit sayısı kadar tarihi tabloya eklersiniz. Tablonun yapısı'da minimum, ödeme ile ilgili tablo ile ilişkilendirilecek bir id ve tarih alanından oluşur. Değişken taksit ödeme söz konusu ise ödenecek miktar eklenebilir, ödenip ödenmediği kontrol edilecek ise ödeme tarihi konulabilir vb.


    http://pgnchess.com
    http://dergikapaklari.com

    10 Ekim 2016 Pazartesi 21:44
  • taksit sayısını ekledim, tutarı da, satın alma tarihini de, sonraki ödeme tarihini de, son ödeme tarihini de. ödendiği taksit sayısı kadar bir sonraki taksit ödeme tarihine ekleme de yapıyorum. minimum tablo yapısı dediğiniz tablom da var. for ile o tabloya ödeme taksit sayısı kadar "i. taksit: tutar / ödeme tarihini+(i)" de yazdırıyorum. fakat bi düzenleme yada kayıt ekleme sırasında textarea kullanıyorum. gözüme hoş gelmedi o şekilde.

    bunu başka ne şekilde yapabilirim? gerekli olursa kodları da paylaşayım.

     

    10 Ekim 2016 Pazartesi 22:00
  • Öncelikle bir konuyu açığa kavuşturalım. Ben Alan (field) deyince kastım klasik Db yapısındaki tek bir veri tipindeki bilginin tutulduğu alanlardır. NoSQL DB'leri değil.  Bu anlamda TextArea kullanmak söylediğim yapıda sadece bir sözleşme kaydı veya her bir taksit için bir açıklama ihtiyacı varsa geçerli olur. 

    http://pgnchess.com
    http://dergikapaklari.com


    • Düzenleyen Halil TAŞ 10 Ekim 2016 Pazartesi 22:18
    10 Ekim 2016 Pazartesi 22:18
  • evet haklısın. katılıyorum. peki nasıl yapabilirim? bilmediğimden textarea kullandım. ne kullanmam gerekiyor?
    10 Ekim 2016 Pazartesi 22:20
  • Sorunuzun cevabı tablo yapınızda.

    http://pgnchess.com
    http://dergikapaklari.com

    • Yanıt Olarak İşaretleyen falan_filan 11 Ekim 2016 Salı 09:16
    10 Ekim 2016 Pazartesi 22:33
  • tablo yapım doğru mu yanlış bilmiyorum fakat şöyle bir çözüm ürettim. henüz yapmadım. her 1 taksit için bir payPlain kaydı oluşturcam. invoiceId'si aynı olacak. ve bunları partial view yapıcam. create, edit ya da listeleme kısmında bu partial view'ları kullanıcam. umarım işe yarar. teşekkürler.
    10 Ekim 2016 Pazartesi 23:24
    • Taksitleri database'e kaydetmene gerek yok!
    • Satış tarihi belli bunu kaydet, taksit sayısı belli bunu kaydet, satılan ürünler, fiyatları ve miktarları da belli buları da kaydet.
    • İstediğin yerde istediğin zaman, database'e gerek kalmadan bir döngü ile taksitleri ve ödemeleri gösterebilirsin.
    • Taksit tablosu soyut bişey.

    @for(var i = 0; i < satış.TaksitSayısı; i++)
    {
       <tr>
          <td>@satış.Tarih.AddMonths(i).ToString("MMMM yyyy")</td>
          <td>@((satış.Ürünler.Sum(p=>p.Fiyat * p.Miktar) / satış.TaksitSayısı).ToString("c2"))</td>
          <td>@satış.Ödemeler.OrderBy(p=>p.Tarih).Take(i+1).Last().Mitar.ToString("c2")</td>
       <tr>
    }


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com






    11 Ekim 2016 Salı 05:57
    Moderatör
  • İlginiz için teşekkürler Önay hocam.

    İyi çalışmalar.

    11 Ekim 2016 Salı 09:15