Συγνώμη για τα κενά της ερώτησης.
Το Component που χρησιμοποιώ είναι το UltraWinGrid v6.1
Το connection για κάποιο (άγνωστο σε μένα) λόγο δεν είναι open αλλά προσπέρασα τον ύφαλο με
System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection();
sqlconn.ConnectionString =MyApp.Properties.Settings.Default.MyAppDataConnectionString;
sqlconn.Open();
Μετά προσπάθησα να δημιουργήσω μία Custom Update() Function στο κατάλληλο TableAdapter του DataSet, μιάς και δεν γίνεται Auto Generated λόγω του JOIN που περιέχει το Select Statement. Δυστυχώς μετά από αρκετές προσπάθειες δεν τα κατάφερα :(
Έπειτα δοκίμασα έναν ποιο ευθύ και προγραμματιστικά "μή έξυπνο" τρόπο (πιο πολύ για να τεστάρω άν δουλεύει)
foreach (DataRow dr in this.MyAppDataSet.Tables[0].Rows)
{
string updateCommand = "Update [dbo].[nCustomers_nProducts] SET [discount]="+dr.ItemArray[0].ToString()+ " WHERE [customer_id]="+dr.ItemArray[5].ToString()+" and [product_id]="+dr.ItemArray[1].ToString();
System.Data.SqlClient.SqlCommand sqlcomm = new System.Data.SqlClient.SqlCommand();
sqlcomm.CommandText = updateCommand;
sqlcomm.Connection= sqlconn;
sqlcomm.ExecuteNonQuery();
}
Εδώ, άν και το updateCommand string που παράγεται παίζει κανονικά μέσα από τον SQL Server Manager, το executable ρίχνει exception στο ExecuteNonQuery().
Να σημειώσω πως το PK του πίνακα nCustomers_nProducts είναι ο συνδιασμός των πεδίων customer_id και product_id και επίσης πως το DataSet Table παίρνει τις αλλαγές των τιμών από το UI Component.
Τέλος αυτό που με απογοήτευσε τελείως είναι πως δεν μπόρεσα να βρώ πουθενά ένα παράδειγμα για το παραπάνω (κοινό πιστεύω) σενάριο.
Ο μόνος τρόπος που το κατάφερα να δουλεύει, είναι άν δεν εκτελέσω JOIN στο Select, αλλά τότε ο χρήστης δεν βλέπει το λεκτικό των πεδίων, αλλά το smallint που χρησιμοποιώ ώς id.