Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Είμαι 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 = "";
	    }
    }
   }
}

Δημοσ.

Δεν εκτελείς την εντολή στον server. Πρέπει να καλέσεις την μέθοδο cmd.ExecuteNonQuery() για την εισαγωγή περισώτερες λεπτομέρειες online help της microsoft ή εδώ για μια μικρή περίληψη.

 

edit:

Το clone αν έχω καταλάβει σωστά απλά δημιουργεί ένα αντίγραφο του αντικειμένου cmd στην μνήμη δεν έχει καμιά ουσία έτσι όπως το χρησιμοποιείς.

Δημοσ.

Μπορώ να πω πως έχω μπερδευτεί λιγάκι..

Έχω βγάλει το cmd.Clone(); και το SqlDataReader dr; και έχω βάλει τώρα και το cmd.ExecuteNonQuery(); από κάτω από το cmd.CommandText = "insert... και μου πετάει error στο cmd.ExecuteNonQuery(); είναι εύκολο να το διορθώσει κάποιος και να το δω πως βγαίνει να πάρω μια ιδέα πως γίνετε τελικά? :wacko:

Δημοσ.

Μπορώ να πω πως έχω μπερδευτεί λιγάκι..

Έχω βγάλει το cmd.Clone(); και το SqlDataReader dr; και έχω βάλει τώρα και το cmd.ExecuteNonQuery(); από κάτω από το cmd.CommandText = "insert... και μου πετάει error στο cmd.ExecuteNonQuery(); είναι εύκολο να το διορθώσει κάποιος και να το δω πως βγαίνει να πάρω μια ιδέα πως γίνετε τελικά? :wacko:

 

Δεν σου βγάζει error στο open; Η SqlClient χρησιμοποιείται για SqlServer. Για access θέλεις OleDb objects.

 

Πρέπει στο Command να του δηλώσεις ποιά σύνδεση θα χρησιμοποιήσει:

cmd.connection = cn;

 

 

Διάβασε όλο αυτό το παράδειγμα, σε πάει από την αρχή μέχρι το τέλος στο να χρησιμοποιήσεις μία access μέσα από C#.

Δημοσ.

Μπορώ να πω πως έχω μπερδευτεί λιγάκι..

Έχω βγάλει το cmd.Clone(); και το SqlDataReader dr; και έχω βάλει τώρα και το cmd.ExecuteNonQuery(); από κάτω από το cmd.CommandText = "insert... και μου πετάει error στο cmd.ExecuteNonQuery(); είναι εύκολο να το διορθώσει κάποιος και να το δω πως βγαίνει να πάρω μια ιδέα πως γίνετε τελικά? :wacko:

 

>
		    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

Δημοσ.

>
		 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

Δημοσ.

Φυσικά. Αυτή τη στιγμή βλέπω τουλάχιστον 8 πράγματα που μπορεί να έχουν κάνει fail μόνο στην INSERT εντολή!!!!

Και πέρνω μόνο αυτό που έγραψες μεμονωμένα χωρίς να αναφέρωμαι καν στο connection string, ή λοιπό κώδικα.

 

Και το πιο εμφανές (1 από 8), είναι ότι μάλλον έχεις γράψει λάθος το firstname ως firtname.

 

Από εκεί και μετά, αν τώρα ξεκινάς, και προσπαθείς να μάθεις πες, να σε κατεθύνουμε καλύτερα ώστε να μάθεις να προγραμματίζεις σωστά.

Αν έχεις κάποιο project και προσπαθείς όπως όπως να το γράψεις, ουδέν σχόλιο.

Δημοσ.

Φυσικά. Αυτή τη στιγμή βλέπω τουλάχιστον 8 πράγματα που μπορεί να έχουν κάνει fail μόνο στην INSERT εντολή!!!!

Και πέρνω μόνο αυτό που έγραψες μεμονωμένα χωρίς να αναφέρωμαι καν στο connection string, ή λοιπό κώδικα.

 

Και το πιο εμφανές (1 από 8), είναι ότι μάλλον έχεις γράψει λάθος το firstname ως firtname.

 

Από εκεί και μετά, αν τώρα ξεκινάς, και προσπαθείς να μάθεις πες, να σε κατεθύνουμε καλύτερα ώστε να μάθεις να προγραμματίζεις σωστά.

Αν έχεις κάποιο project και προσπαθείς όπως όπως να το γράψεις, ουδέν σχόλιο.

 

Αν και όντως έχεις δίκιο υπάρχει ορθογραφικό λάθος επειδή τα έκανα γρήγορα είναι όλοι η αλυσίδα έτσι δηλαδή db + κώδικας any way... το θέμα είναι πως να εξαφανίσουμε τώρα το Error του ExecuteNoQuery..

Ναι είμαι νέος πάνω στο αντικείμενο αυτό όπως περιγράφω και στο πρώτο post..και να πω την αλήθεια απελπίζομαι λιγάκι γιατί βλέπω όσο και περίεργο και αν ακούγεται για ένα insert data γίνετε ολόκληρη μανούβρα δηλαδή το επόμενο στάδιο που θα θέλω να πάω insert,edit,delete,listview και search τι έχει να γίνει? σίγουρα όμως λέω ότι ο προγραμματισμός δεν είναι κάτι εύκολο για αυτό και χρειάζεται σπαζοκεφαλιά :-D

Δημοσ.

Αν χρειάζεσαι να κάνεις 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 του συστήματος.

κλπ.

Δημοσ.

Αφου εισαι στην αρχη καλο ειναι να αναφερεις τι ερορ σου βγαζει.

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

 

Ευχαριστώ @Απολλ για της πληροφορίες

Δημοσ.

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 ;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...