DCSIMG
WCF return list - .NET Technology - Προγραμματισμός - StudentGuru

WCF return list

Το τρέχω με break points και βλέπω ότι μετά το read τα dc παίρνουν τιμές άλλα δεν μπορώ να γεμίσω την λίστα μου τι έχω κάνει λάθος?

public List<dataconnect> GetData(int Id)

{

SqlConnection con = new SqlConnection("Data Source=ACERASPIRE5755\\SQLEXPRESS;uid=******;password=******;database=aspLOGIN");

dataconnect dc = new dataconnect();

con.Open();

SqlCommand cmd = new SqlCommand("select productcode,name,price,quanity,dateofreceipt,employer,supplier,paycost,note from product where productID='" + Id + "' ", con);

SqlDataReader dr;

dr = cmd.ExecuteReader();

dr.Read();

dc.productcode = dr["productcode"].ToString();

dc.name = dr["name"].ToString();

dc.price = dr["price"].ToString();

dc.quanity = dr["quanity"].ToString();

dc.dateofreceipt = dr["dateofreceipt"].ToString();

dc.employer = dr["employer"].ToString();

dc.supplier = dr["supplier"].ToString();

dc.paycost = dr["paycost"].ToString();

dc.note = dr["note"].ToString();

List<dataconnect> list = new List<dataconnect>();

list.Add(dc);

con.Close();

return list;

}

7 Replies

  • με τον κώδικα αυτόν κάθε φορά θα γυρνάς μία λίστα που έχει ένα αντικείμενο (αν δλδ το βρει στη βάση). αυτό θες να κάνεις;

  • In reply to Δημήτρης Γκανάτσιος:

    Ναι ένα αντικείμενο κάθε φορά μια γραμμή δηλαδή τού πινάκα μου. Δεν μου γεμίζει όμως η λίστα κάτι κάνω λάθος?

    Υπάρχει κάτι άλλο για να μπορέσω να το κάνω αυτό?

  • In reply to thester:

    Από ότι βλέπω από τον κώδικα σου η λίστα που θες να επιστρέψεις θα περιέχει πάντα ένα αντικείμενο dataconnect (αν υπάρχει το id στην βάση) επομένως γιατί δεν επιστρέφεις μόνο αυτό το αντικείμενο και το βάζεις και σε λίστα;

    Επιπλέον αφού αυτό πρόκειται για wcf service θα πρέπει να μαρκάρεις την κλάση dataconnect με το attribute [DataContract] και κάθε property της κλάσης με το attribute [DataMember]. Αν και ο debugger του visual studio δείχνει ότι τα properties παίρνουν κανονικά τιμές μέσα στην GetData τότε δεν υπάρχει κάποιος άλλος προφανής λόγος να μην λειτουργεί σωστά.

    Τέλος, εκτός λίγο της ερώτησης που έκανες, χρησιμοποιήσε και κάποιο try/catch/finally block ή κάποιο using μιας και προσπαθείς να συνδεθείς σε βάση.

  • In reply to Giorgos Manoltzas:

    Έβαλα λίστα γιατί θέλω με τα να μπορώ να διαβάζω την κάθε τιμή μετά. Χωρίς λίστα γίνεται να μπορώ μετ να διαβάσω την κάθε τιμή ξεχωριστά?

    Δεν τα πολύ κατάλαβα αυτά που μου έγραψες!!

    Υπάρχει κανένα link για να δω κάποιο παράδειγμα?  

    [OperationContract]

    List<dataconnect> GetData(int Id);

    [DataContract]

       public class dataconnect

       {

           public string productcode;

           public string name;

           public string price;

           public string quanity;

           public string dateofreceipt;

           public string employer;

           public string supplier;

           public string paycost;

           public string note;

           [DataMember]

           public string productcodeps

           {

               get { return productcode; }

               set { productcode = value; }

           }

           [DataMember]

           public string nameps

           {

               get { return name; }

               set { name = value; }

           }

           [DataMember]

           public string priceps

           {

               get { return price; }

               set { price = value; }

           }

           [DataMember]

           public string quanityps

           {

               get { return quanity; }

               set { quanity = value; }

           }

           [DataMember]

           public string dateofreceiptps

           {

               get { return dateofreceipt; }

               set { dateofreceipt = value; }

           }

           [DataMember]

           public string employerps

           {

               get { return employer; }

               set { employer = value; }

           }

           [DataMember]

           public string supplierps

           {

               get { return supplier; }

               set { supplier = value; }

           }

           [DataMember]

           public string paycostps

           {

               get { return paycost; }

               set { paycost = value; }

           }

           [DataMember]

           public string noteps

           {

               get { return note; }

               set { note = value; }

           }

       }

    kai to svc

    public List<dataconnect> GetData(int Id)

           {

               SqlConnection con = new SqlConnection("Data Source=ACERASPIRE5755\\SQLEXPRESS;uid=*******;password=****;database=aspLOGIN");

               dataconnect dc = new dataconnect();

               con.Open();

               SqlCommand cmd = new SqlCommand("select productcode,name,price,quanity,dateofreceipt,employer,supplier,paycost,note from product where productID='" + Id + "' ", con);

               SqlDataReader dr;

               dr = cmd.ExecuteReader();

          List<dataconnect> list = new List<dataconnect>();

            dr.Read();

               dc.productcode = dr["productcode"].ToString();

               dc.name = dr["name"].ToString();

               dc.price = dr["price"].ToString();

               dc.quanity = dr["quanity"].ToString();

               dc.dateofreceipt = dr["dateofreceipt"].ToString();

               dc.employer = dr["employer"].ToString();        

               dc.supplier = dr["supplier"].ToString();            

               dc.paycost = dr["paycost"].ToString();        

               dc.note = dr["note"].ToString();

               list.Add(dc);          

               con.Close();

               return list;

           }

  • In reply to thester:

    Δες το παρακάτω άρθρο έχει ένα αρκετό καλό παράδειγμα για wcf www.codeproject.com/.../Restful-Crud-Operation-on-a-WCF-Service και επίσης δες και το παρακάτω για το πως να δημιουργείς πιο εύκολα τα properties μια κλάσης michaelsync.net/.../c-30-tutorials-auto-implemented-properties-aka-automatic-properties

  • In reply to Giorgos Manoltzas:

    Έχω μια λίστα pr που την γεμίζω από την βάση μου με δεδομένα κάθε φορά.

    Με τον παρακάτω κωδικά γεμίζω ένα <asp:GridView> με τις τιμές που έχω στο pr

    το θέμα μου είναι ότι για να έχω μια καινούρια γραμμή στο  <asp:GridView> πρέπει να έχω και την παρακάτω εντολή όσες γραμμές θέλω να εμφανίζονται στο  <asp:GridView>

    new AdministratorNotesPage1{noteId = (pr[0].notesID).ToString(), subject = pr[0].subject, date = pr[0].date, body = pr[0].boby},

    πως μπορώ να το αλλάξω αυτό?

    Δηλαδή το  Employees1 να γεμίζει με μια δομή επανάληψης

    List<AdministratorNotesPage1> Employees1 = new List<AdministratorNotesPage1>

                       {

                           new AdministratorNotesPage1{noteId = (pr[0].notesID).ToString(), subject = pr[0].subject, date = pr[0].date, body = pr[0].boby},

                            new AdministratorNotesPage1{noteId = (pr[1].notesID).ToString(), subject = pr[1].subject, date = pr[1].date, body = pr[1].boby},

                       };

                   gvEmp.DataSource = Employees1;

                   gvEmp.DataBind();

    κάτι τέτοιο θέλω να κάνω και εδώ να γεμίζω την λίστα  Employees1 με τις τιμές που υπάρχουν ειδή στην λίστα pr

    for (int i = 0; i < pr.Count; i++)

               {

                   na gemizei to  Employees1 apo to pr

               }

  • In reply to thester:

    Αν κατάλαβα καλά δεν θα σου χρειαστεί κάποια δομή επανάληψης. Απλά πρέπει να φτιάξεις ένα template για το GridView σου www.asp.net/.../using-templatefields-in-the-gridview-control-cs

Related