>ciao, io dovrei fare un progetto, ma siccome sono davvero scarso
>non riesco purtroppo a fare funzionare l'insert(parlo di asp.net).
Ciao, c'è un po' di confusione.. 
Andiamo per passo:
>string stringSQL2 = "Insert into Capi (cod_ident_capo,tipo_capo,servizio,stato)
>values ('" + cod_ident_capo + "','" + tipo_capo + "','" + servizio + "','" + stato + "') ";
Questa è una cosa da non fare mai, altrimenti sei esposto ad attacchi di tipo SQL Injection (per maggiori info leggi qui http://www.dotnethell.it/articles/SQL-Injection-Tutorial-Security.aspx)
sostituisci con:
questa è la sintassi di una query definita come PARAMETRICA (notare che i parametri sono definiti con il carattere @ davanti.
devi quindi definire i parametri in questo modo:
cmd.Parameters.AddWithValue("p_cod_ident_capo", cod_ident_capo);
cmd.Parameters.AddWithValue("p_tipo_capo", tipo_capo);
cmd.Parameters.AddWithValue("p_servizio", servizio);
cmd.Parameters.AddWithValue("p_stato", stato);
in questo modo hai mappato il tuo parametro con la variabile che prima usavi per la concatenazione della stringa. E sei protetto da attacchi.
> SqlDataReader reader = cmd.ExecuteReader();
> gridViewLavanderia.DataSource = reader;
> gridViewLavanderia.DataBind();
> reader.Close(); //Chiude il "resul set"
perchè fai un reader (lettore di dati) e lo imposti come sorgente di un items container (la griglia) se fai solo insert? è inutile, usa invece ExecuteNonQuery (http://msdn.microsoft.com/it-it/library/system.data.sqlclient.sqlcommand.executenonquery(VS.80).aspx) e aggiungi la gestione dell'errore con try catch (http://msdn.microsoft.com/en-us/library/0yd65esw(VS.71).aspx):
try
{
cmd.ExecuteNonQuery ();
} catch (Exception ex)
{
Response.Write(String.Format("Errore: {0}", ex.Message));
}
Siccome poi la connessione ha anche bisogno di dispose, ti consiglio questa sintassi finale che fa la dispone in automatico (libera la memoria occupata dall'oggetto):
using (SqlConnection c2 = new SqlConnection ("tua connstring"))
{
c2.Open();
using (SqlCommand cmd = new SqlCommand(stringSQL2, c2))
{
try
{
cmd.Parameters.AddWithValue("p_cod_ident_capo", cod_ident_capo);
cmd.Parameters.AddWithValue("p_tipo_capo", tipo_capo);
cmd.Parameters.AddWithValue("p_servizio", servizio);
cmd.Parameters.AddWithValue("p_stato", stato);
cmd.ExecuteNonQuery();
} catch (Exception ex)
{
Response.Write(String.Format("Errore: {0}", ex.Message));
}
c2.Close();
}
}
>mi dice: "Violazione del vincolo PRIMARY KEY 'PK_Capi'. Impossibile
>inserire la chiave duplicata nell'oggetto 'dbo.Capi'."
>Naturalmente il valore che gli passo come chiave non è già stato
>utilizzato, ma nonostante ciò mi da chiave duplicata:( sapresti
>aiutarmi???
questo è perchè facevi l'execute reader (e la query veniva lanciata la prima volta) e poi fai la DataBind (ovvero rilancia la query).. Due volte, la seconda è violazione di PK.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi