Anti-WQZ Δημοσ. 10 Αυγούστου 2012 Δημοσ. 10 Αυγούστου 2012 Είμαι New πάνω στο αντικείμενο τις C# και έχω φτιάξει έναν μικρό κώδικα για καταχώρηση στοιχείων, όταν λοιπόν πάω να το εκτελέσω με F5 και βάζω στοιχεια και πατάω μετά Save για να μπει στην Database τις Access με αποτέλεσμα νε μεν μου βγάζει το μήνυμα Record Inserted!, αλλα όταν πάω να δω στην Database άμα καταχωρήθηκαν δεν μου βγάζει τίποτα.. Μήπως έχω κάνει κάποιο λάθος κάπου που έχω παραλείψει κάτι? > using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace WindowsFormsApplication1 { public partial class Form1 : Form { SqlConnection cn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Administrator\AppData\Local\Temporary Projects\WindowsFormsApplication1\Customers.mdf;Integrated Security=True;User Instance=True"); SqlCommand cmd = new SqlCommand(); SqlDataReader dr; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { if (id.Text != "" & firtname.Text != "" & lastname.Text != "" & email.Text != "") { cn.Open(); cmd.CommandText = "insert into Users (id,firtname,lastnane,email) values ('" + id.Text + "','" + firtname.Text + "','" + lastname.Text + "','" + email.Text + "')"; cmd.Clone(); MessageBox.Show("Record Inserted!"); cn.Close(); id.Text = ""; firtname.Text = ""; lastname.Text = ""; email.Text = ""; } } } }
taazz Δημοσ. 10 Αυγούστου 2012 Δημοσ. 10 Αυγούστου 2012 Δεν εκτελείς την εντολή στον server. Πρέπει να καλέσεις την μέθοδο cmd.ExecuteNonQuery() για την εισαγωγή περισώτερες λεπτομέρειες online help της microsoft ή εδώ για μια μικρή περίληψη. edit: Το clone αν έχω καταλάβει σωστά απλά δημιουργεί ένα αντίγραφο του αντικειμένου cmd στην μνήμη δεν έχει καμιά ουσία έτσι όπως το χρησιμοποιείς.
nilosgr Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Επίσης ο SqlDataReader δεν χρησιμεύει στο να γράφεις δεδομένα σε database, αλλά στο να διαβάζεις δεδομένα.
Anti-WQZ Δημοσ. 11 Αυγούστου 2012 Μέλος Δημοσ. 11 Αυγούστου 2012 Μπορώ να πω πως έχω μπερδευτεί λιγάκι.. Έχω βγάλει το cmd.Clone(); και το SqlDataReader dr; και έχω βάλει τώρα και το cmd.ExecuteNonQuery(); από κάτω από το cmd.CommandText = "insert... και μου πετάει error στο cmd.ExecuteNonQuery(); είναι εύκολο να το διορθώσει κάποιος και να το δω πως βγαίνει να πάρω μια ιδέα πως γίνετε τελικά?
MitsakosGR Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Μπορώ να πω πως έχω μπερδευτεί λιγάκι.. Έχω βγάλει το cmd.Clone(); και το SqlDataReader dr; και έχω βάλει τώρα και το cmd.ExecuteNonQuery(); από κάτω από το cmd.CommandText = "insert... και μου πετάει error στο cmd.ExecuteNonQuery(); είναι εύκολο να το διορθώσει κάποιος και να το δω πως βγαίνει να πάρω μια ιδέα πως γίνετε τελικά? Δεν σου βγάζει error στο open; Η SqlClient χρησιμοποιείται για SqlServer. Για access θέλεις OleDb objects. Πρέπει στο Command να του δηλώσεις ποιά σύνδεση θα χρησιμοποιήσει: cmd.connection = cn; Διάβασε όλο αυτό το παράδειγμα, σε πάει από την αρχή μέχρι το τέλος στο να χρησιμοποιήσεις μία access μέσα από C#.
nspyrou Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Μπορώ να πω πως έχω μπερδευτεί λιγάκι.. Έχω βγάλει το cmd.Clone(); και το SqlDataReader dr; και έχω βάλει τώρα και το cmd.ExecuteNonQuery(); από κάτω από το cmd.CommandText = "insert... και μου πετάει error στο cmd.ExecuteNonQuery(); είναι εύκολο να το διορθώσει κάποιος και να το δω πως βγαίνει να πάρω μια ιδέα πως γίνετε τελικά? > private void button1_Click(object sender, EventArgs e) { if (id.Text != "" & firtname.Text != "" & lastname.Text != "" & email.Text != "") { try { cn.Open(); cmd.Connection = cn; cmd.CommandText = "insert into Users (id,firtname,lastnane,email) values ('" + id.Text + "','" + firtname.Text + "','" + lastname.Text + "','" + email.Text + "')"; if ( cmd.ExecuteNoQuery() > 0 ) MessageBox.Show("Record insertion: Success!"); else MessageBox.Show("Record insertion: Failure!"); cn.Close(); id.Text = ""; firtname.Text = ""; lastname.Text = ""; email.Text = ""; return; } catch( Exception Ex ) { cn.Close(); MessageBox.Show(Ex.Message, "Exception Error"); } } } Έτσι εισάγεις εγγραφή αν θέλεις να χρησιμοποιήσεις SqlCommand
Anti-WQZ Δημοσ. 11 Αυγούστου 2012 Μέλος Δημοσ. 11 Αυγούστου 2012 > private void button1_Click(object sender, EventArgs e) { if (id.Text != "" & firtname.Text != "" & lastname.Text != "" & email.Text != "") { try { cn.Open(); cmd.Connection = cn; cmd.CommandText = "insert into Users (id,firtname,lastnane,email) values ('" + id.Text + "','" + firtname.Text + "','" + lastname.Text + "','" + email.Text + "')"; if ( cmd.ExecuteNoQuery() > 0 ) MessageBox.Show("Record insertion: Success!"); else MessageBox.Show("Record insertion: Failure!"); cn.Close(); id.Text = ""; firtname.Text = ""; lastname.Text = ""; email.Text = ""; return; } catch( Exception Ex ) { cn.Close(); MessageBox.Show(Ex.Message, "Exception Error"); } } } Έτσι εισάγεις εγγραφή αν θέλεις να χρησιμοποιήσεις SqlCommand Μου βγάζει error στο ExecuteNoQuery
Apoll Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Φυσικά. Αυτή τη στιγμή βλέπω τουλάχιστον 8 πράγματα που μπορεί να έχουν κάνει fail μόνο στην INSERT εντολή!!!! Και πέρνω μόνο αυτό που έγραψες μεμονωμένα χωρίς να αναφέρωμαι καν στο connection string, ή λοιπό κώδικα. Και το πιο εμφανές (1 από 8), είναι ότι μάλλον έχεις γράψει λάθος το firstname ως firtname. Από εκεί και μετά, αν τώρα ξεκινάς, και προσπαθείς να μάθεις πες, να σε κατεθύνουμε καλύτερα ώστε να μάθεις να προγραμματίζεις σωστά. Αν έχεις κάποιο project και προσπαθείς όπως όπως να το γράψεις, ουδέν σχόλιο.
Anti-WQZ Δημοσ. 11 Αυγούστου 2012 Μέλος Δημοσ. 11 Αυγούστου 2012 Φυσικά. Αυτή τη στιγμή βλέπω τουλάχιστον 8 πράγματα που μπορεί να έχουν κάνει fail μόνο στην INSERT εντολή!!!! Και πέρνω μόνο αυτό που έγραψες μεμονωμένα χωρίς να αναφέρωμαι καν στο connection string, ή λοιπό κώδικα. Και το πιο εμφανές (1 από 8), είναι ότι μάλλον έχεις γράψει λάθος το firstname ως firtname. Από εκεί και μετά, αν τώρα ξεκινάς, και προσπαθείς να μάθεις πες, να σε κατεθύνουμε καλύτερα ώστε να μάθεις να προγραμματίζεις σωστά. Αν έχεις κάποιο project και προσπαθείς όπως όπως να το γράψεις, ουδέν σχόλιο. Αν και όντως έχεις δίκιο υπάρχει ορθογραφικό λάθος επειδή τα έκανα γρήγορα είναι όλοι η αλυσίδα έτσι δηλαδή db + κώδικας any way... το θέμα είναι πως να εξαφανίσουμε τώρα το Error του ExecuteNoQuery.. Ναι είμαι νέος πάνω στο αντικείμενο αυτό όπως περιγράφω και στο πρώτο post..και να πω την αλήθεια απελπίζομαι λιγάκι γιατί βλέπω όσο και περίεργο και αν ακούγεται για ένα insert data γίνετε ολόκληρη μανούβρα δηλαδή το επόμενο στάδιο που θα θέλω να πάω insert,edit,delete,listview και search τι έχει να γίνει? σίγουρα όμως λέω ότι ο προγραμματισμός δεν είναι κάτι εύκολο για αυτό και χρειάζεται σπαζοκεφαλιά
παπι Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Αφου εισαι στην αρχη καλο ειναι να αναφερεις τι ερορ σου βγαζει. compile error? runtime error? exception? Τι λεει;
Apoll Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Αν χρειάζεσαι να κάνεις insert, edit, delete κλπ, φτιάξε ένα users (κλπ) αντικείμενο που θα τα κάνει. Από εκεί και μετά, το execute no query είναι η κορυφή του παγόβουνου. Χρησιμοποίησε oledbconnection, μιας και χρησιμοποιείς Access (γιατί Access και όχι SQL; ). Η SQLconn κάνει συνδέσεις σε SQL και γι αυτό είναι σχεδιασμένη. OleDBConn είναι σχεδιασμένη για όλες τις βάσεις, και ο κώδικά σου δεν θα θέλει κάποια μετατροπή αν αύριο αλλάξεις βάση. Επίσης μην χρησιμοποιείς temp folders για την βάση δεδομένων που δημιουργούνται όταν τρέχει το πρόγραμμα (όπως κάνεις). Βάλε την βάση σε κάποιο μέρος αλλού στο δίσκο. Χρησιμοποίησε oledbparameters ή sqlparameters (ανάλογα τι χρησιμοποιείς), μην χώνεις τα πάντα σε ένα string και ελπίζεις ότι ο Δίας θα κάνει θαύμα. Μην εκτελείς τις εντολές από τον κώδικά. Φτιάξε stored procedures (Access 2010 υποστηρίζει σχετικά, όπως και table triggers) Παρατήρησε το table Users και την δομή του. Αν το ID πεδίο είναι κλειδί με auto increment, δεν μπορείς να του βάλεις εσύ την τιμή. Για να το κάνεις αυτό (και να σπάσεις το seed) ακυρώσεις (με TSQL εντολή) την λειτουργία αυτή, και την επαναφέρεις αργότερα. Αν τα string που εισάγεις είναι εκτός μέγιστου μεγέθους, επίσης θα έχεις λάθος. Αυτά για αρχή. Ξεκίνα με την δημιουργία ενός Users object και σε αυτό κάνε τις λειτουργίες. Το db connection αντικείμενο βάλτο σε άλλο object το οποίο θα είναι αποκλειστικά και μόνο για αυτό το λόγο. Τo connection string βάλτο σε γραμμένο ως xml αρχείο το οποίο θα χρησιμοποιείς ως system settings, και θα έχεις αντικείμενο για να βλέπεις τα settings του συστήματος. κλπ.
Anti-WQZ Δημοσ. 11 Αυγούστου 2012 Μέλος Δημοσ. 11 Αυγούστου 2012 Αφου εισαι στην αρχη καλο ειναι να αναφερεις τι ερορ σου βγαζει. compile error? runtime error? exception? Τι λεει; Error 1 'System.Data.SqlClient.SqlCommand' does not contain a definition for 'ExecuteNoQuery' and no extension method 'ExecuteNoQuery' accepting a first argument of type 'System.Data.SqlClient.SqlCommand' could be found (are you missing a using directive or an assembly reference?) C:\Users\Administrator\Desktop\Form1.cs 35 29 WindowsFormsApplication1 Ευχαριστώ @Απολλ για της πληροφορίες
παπι Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Error 1 'System.Data.SqlClient.SqlCommand' does not contain a definition for 'ExecuteNoQuery' and no extension method 'ExecuteNoQuery' accepting a first argument of type 'System.Data.SqlClient.SqlCommand' could be found (are you missing a using directive or an assembly reference?) C:\Users\Administrator\Desktop\Form1.cs 35 29 WindowsFormsApplication1 Ευχαριστώ @Απολλ για της πληροφορίες Ωραιοτατα, βλεπεις τα errors ειναι περιγραφικα, πας στο reference τοθ SqlCommand και βλεπεις οτι δεν υπαρχει ExecuteNoQuery αλλα ExecuteNonQuery http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx btw Δεν σου δουλευει το autocomplete? δλδ αν γραψεις cmd.ex δεν σου βγαζει τα members της καλσης που αρχιζουν ή εχουν το ex ;
Anti-WQZ Δημοσ. 11 Αυγούστου 2012 Μέλος Δημοσ. 11 Αυγούστου 2012 Επιτέλους φως δούλεψε μια χαρά κοίτα τι γίνετε για ένα N
Apoll Δημοσ. 11 Αυγούστου 2012 Δημοσ. 11 Αυγούστου 2012 Συγνώμη, το ότι είχε συντακτικό λάθος δεν το είδες στο IDE;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα