|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
C# - query INSERT INTO non dà errori ma non inserisce il record
Buonasera a tutti,
premetto che sono nuovo nel campo della programmazione in C#. Mi è stato dato da fare un progetto che consiste nella gestione di un database con un'applicazione creata in c#. Utilizzo Visual Studio Express 2010 e SQL Server Express 2008. Il problema sta nel fatto che l'esecuzione della query Insert, pur non dando errori, non mi inserisce all'interno del Database (chiamato Database1.mdf) i dati recuperati dalla form. Ecco il codice: private void cmdinsutente_Click(object sender, EventArgs e) { string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True;User Instance=True"; SqlConnection conn = new SqlConnection(connString); try { string codice = txtcod.Text; string nome = txtnome.Text; string cognome = txtcognome.Text; string login = txtlogin.Text; string pass = txtpass.Text; string admin = cboadmin.Text; string query = "INSERT INTO Utenti (Codice_Utente, Nome, Cognome, Login, Password, Administrator) VALUES (@codice, @nome, @cognome, @login, @pass, @admin)"; SqlCommand insert = new SqlCommand(query, conn); insert.Parameters.AddWithValue("@codice", codice); insert.Parameters.AddWithValue("@nome", nome); insert.Parameters.AddWithValue("@cognome", cognome); insert.Parameters.AddWithValue("@login", login); insert.Parameters.AddWithValue("@pass", pass); insert.Parameters.AddWithValue("@admin", admin); conn.Open(); insert.ExecuteNonQuery(); } catch (SqlException errore) { Console.WriteLine("Error: " + errore); } finally { conn.Close(); string message = "Vuoi continuare ad inserire utenti?"; string caption = "Form di richiesta"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); if (result == System.Windows.Forms.DialogResult.No) { this.Close(); } else { txtcod.Text = ""; txtnome.Text = ""; txtcognome.Text = ""; txtlogin.Text = ""; txtpass.Text = ""; cboadmin.Text = ""; } } } Cosa è sbagliato? Come risolvere il problema? Grazie del vostro aiuto, Luca. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
non ho visual studio sotto mano per fare delle prove, ma per prima cosa io controllerei la struttura della tabella, da come hai inserito i parametri i campi sono tutti varchar? la dimensione massima è abbastanza grande da contenere i valori che hai messo nella maschera?
hai una chiave primaria su quella tabella? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
allora:
1) la tabella ha una primary key nel campo Codice_Utente. 2) alcuni campi non sono varchar, ma come fare per modificare il tipo? Anziché string mettere int o simili? 3) in che senso "la dimensione massima è abbastanza grande da contenere i valori che hai messo nella maschera"? Grazie della risposta |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
Quote:
2) esatto, se il campo è un int, la variabile che assegni al @parametro deve essere di tipo int 3) es: campo varchar di lunghezza 5 (codice postale) e il valore della variabile è 001122 (lunghezza 6) |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
la primary key non è di tipo incrementale... si tratta di un semplice int assegnato al campo Codice_Utente. Riguardo invece la lunghezza dei varchar non ho impostato nulla, perciò non credo sia quel tipo di problema!!
Riguardo invece la conversione da stringa ad intero ho usato questa dichiarazione: "int x = Int32.Parse(myTextBox.Text);" ... quindi anche se dopo tengo lo stesso @parametro che avevo prima non mi dovrebbe dare più problemi... però comunque sia non mi aggiunge la riga
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
Per un errore mio non ho visto che anziché terminare il "try" entra nell'eccezione e mi dà errore. Non so però che tipo di errore...
Riposto il codice completo di tutto il progetto: 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 frmutente : Form { public frmutente() { InitializeComponent(); } private void cmdannulla_Click(object sender, EventArgs e) { this.Close(); } private void cmdinsutente_Click(object sender, EventArgs e) { string connString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True;User Instance=True"; SqlConnection conn = new SqlConnection(connString); try { int codice = Int32.Parse(txtcod.Text); string nome = txtnome.Text; string cognome = txtcognome.Text; string login = txtlogin.Text; string pass = txtpass.Text; string admin = cboadmin.Text; string query = "INSERT INTO Utenti (Codice_Utente, Nome, Cognome, Login, Password, Administrator) VALUES (@codice, @nome, @cognome, @login, @pass, @admin)"; SqlCommand insert = new SqlCommand(query, conn); insert.Parameters.AddWithValue("@codice", codice); insert.Parameters.AddWithValue("@nome", nome); insert.Parameters.AddWithValue("@cognome", cognome); insert.Parameters.AddWithValue("@login", login); insert.Parameters.AddWithValue("@pass", pass); insert.Parameters.AddWithValue("@admin", admin); conn.Open(); insert.ExecuteNonQuery(); MessageBox.Show("Record inserted.", "Messaggio di inserimento", MessageBoxButtons.OK); } catch (SqlException errore) { MessageBox.Show("Errore!"); } finally { conn.Close(); string message = "Vuoi continuare ad inserire utenti?"; string caption = "Form di richiesta"; var result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); if (result == System.Windows.Forms.DialogResult.No) { this.Close(); } else { txtcod.Text = ""; txtnome.Text = ""; txtcognome.Text = ""; txtlogin.Text = ""; txtpass.Text = ""; cboadmin.Text = ""; } } } } } Chiedo aiuto perché non so più dove mettere mano..
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
Facendo il debug e mettendo i punti di interruzione, l'applicazione esce dal try alla riga dell'"insert.ExecuteNonQuery();".
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
questo è il messaggio di errore che si crea: http://imageshack.us/photo/my-images...aginejbxo.jpg/
idee??? Io non so proprio di che si tratta... Grazie a tutti per il vostro aiuto! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
dall'errore che hai postato, la riga che causa il problema è la conn.open
facendo una ricerca veloce su google il problema potrebbe essere il fatto che nella stringa di connessione usi |DataDirectory| per definire parte del percorso. fai delle prove facendo riferimento a un percorso fisso (es: c:\db\db1.mdf) |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
Ho risolto il problema copiando e spostando il file Database.mdf nella cartella Bin\"Debug".
Lasciando tutto com'era ho quindi riprovato e mi ha eseguito tutta la funzione correttamente. Come mai questo? Scusa se chiedo, ma vorrei capire perché cambiando directory il tutto funzioni. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2008
Messaggi: 429
|
perché appunto nella stringa di connessione al db hai |DataDirectory|
ora stai compilando in debug, se compili in release vedrai che non funzionerà perché il db lo andrà a cercare dentro bin\release comunque l'importante è che ora funzioni, poi man mano lo sistemi |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2008
Messaggi: 84
|
Grazie mille del tuo aiuto, senza di te non avrei mai risolto.
Alla prossima!!!! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:39.




















