Problema con le insert

venerdì 03 agosto 2007 - 20.20

_J_ Profilo | Senior Member

salve ragazzi,
questo è il codice che uso per inserire un nuovo record all'interno di una tabella cittadino:

protected void Button1_Click(object sender, EventArgs e)
{
string tutti = "ins_nuovo_cittadino";
SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["dati_generali"].ConnectionString);
try
{
oConn.Open(); //apro la connessione...
}
catch
{
oConn.Close();
oConn.Open(); //apro la connessione...
}
SqlDataAdapter adatt = new SqlDataAdapter(tutti,oConn);
adatt.SelectCommand.CommandType = CommandType.StoredProcedure;

adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_persona", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@primo_nome", SqlDbType.VarChar));
//adatt.SelectCommand.Parameters.Add(new SqlParameter("@secondo_nome", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cognome", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@sesso", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@data_ora_min_nascita", SqlDbType.DateTime));
/* adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_istat_com_ita_nascita", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_com_est_nascita", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_istat_com_ita_prima_iscr", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_com_est_prima_iscr", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_padre", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_madre", SqlDbType.Int));*/
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_fiscale", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@prima_cittadinanza", SqlDbType.VarChar));
/* adatt.SelectCommand.Parameters.Add(new SqlParameter("@seconda_cittadinanza", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@nr_atto_iscrizione", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@parte_i", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@serie_i", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@ufficio_i", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@volume_i", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@data_i", SqlDbType.DateTime));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@nr_atto_trascrizione", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@parte_t", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@serie_t", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@ufficio_t", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@volume_t", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@data_t", SqlDbType.DateTime));*/
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_condizione", SqlDbType.VarChar));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_titolo_studio", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_professione", SqlDbType.Int));
adatt.SelectCommand.Parameters.Add(new SqlParameter("@cod_ramo_attivita", SqlDbType.Int));

adatt.SelectCommand.Parameters["@cod_persona"].Value = Server.HtmlEncode(TextBox1.Text);
adatt.SelectCommand.Parameters["@primo_nome"].Value = Server.HtmlEncode(TextBox2.Text);
// adatt.SelectCommand.Parameters["@secondo_nome"].Value = Server.HtmlEncode(TextBox3.Text);
adatt.SelectCommand.Parameters["@cognome"].Value = Server.HtmlEncode(TextBox4.Text);
adatt.SelectCommand.Parameters["@sesso"].Value = Server.HtmlEncode(Label1.Text);
adatt.SelectCommand.Parameters["@data_ora_min_nascita"].Value = Server.HtmlEncode(TextBox5.Text);
/* adatt.SelectCommand.Parameters["@cod_istat_com_ita_nascita"].Value = Server.HtmlEncode(Label2.Text);
adatt.SelectCommand.Parameters["@cod_com_est_nascita"].Value = Server.HtmlEncode(Label3.Text);
adatt.SelectCommand.Parameters["@cod_istat_com_ita_prima_iscr"].Value = Server.HtmlEncode(Label4.Text);
adatt.SelectCommand.Parameters["@cod_com_est_prima_iscr"].Value = Server.HtmlEncode(Label5.Text);
adatt.SelectCommand.Parameters["@cod_padre"].Value = Server.HtmlEncode(TextBox12.Text);
adatt.SelectCommand.Parameters["@cod_madre"].Value = Server.HtmlEncode(TextBox13.Text);*/
adatt.SelectCommand.Parameters["@cod_fiscale"].Value = Server.HtmlEncode(TextBox14.Text);
adatt.SelectCommand.Parameters["@prima_cittadinanza"].Value = Server.HtmlEncode(TextBox33.Text);
/* adatt.SelectCommand.Parameters["@seconda_cittadinanza"].Value = Server.HtmlEncode(TextBox15.Text);
adatt.SelectCommand.Parameters["@nr_atto_iscrizione"].Value = Server.HtmlEncode(TextBox16.Text);
adatt.SelectCommand.Parameters["@parte_i"].Value = Server.HtmlEncode(TextBox17.Text);
adatt.SelectCommand.Parameters["@serie_i"].Value = Server.HtmlEncode(TextBox18.Text);
adatt.SelectCommand.Parameters["@ufficio_i"].Value = Server.HtmlEncode(TextBox19.Text);
adatt.SelectCommand.Parameters["@volume_i"].Value = Server.HtmlEncode(TextBox20.Text);
adatt.SelectCommand.Parameters["@data_i"].Value = Server.HtmlEncode(TextBox21.Text);
adatt.SelectCommand.Parameters["@nr_atto_trascrizione"].Value = Server.HtmlEncode(TextBox22.Text);
adatt.SelectCommand.Parameters["@parte_t"].Value = Server.HtmlEncode(TextBox23.Text);
adatt.SelectCommand.Parameters["@serie_t"].Value = Server.HtmlEncode(TextBox24.Text);
adatt.SelectCommand.Parameters["@ufficio_t"].Value = Server.HtmlEncode(TextBox25.Text);
adatt.SelectCommand.Parameters["@volume_t"].Value = Server.HtmlEncode(TextBox26.Text);
adatt.SelectCommand.Parameters["@data_t"].Value = Server.HtmlEncode(TextBox27.Text);*/
adatt.SelectCommand.Parameters["@cod_condizione"].Value = Server.HtmlEncode(Label6.Text);
adatt.SelectCommand.Parameters["@cod_titolo_studio"].Value =Server.HtmlEncode(Label7.Text);
adatt.SelectCommand.Parameters["@cod_professione"].Value = Server.HtmlEncode(Label8.Text);
adatt.SelectCommand.Parameters["@cod_ramo_attivita"].Value = Server.HtmlEncode(Label9.Text);

adatt.SelectCommand.ExecuteNonQuery();
adatt.SelectCommand.Dispose();

DataSet ds = new DataSet();
adatt.Fill(ds,"tabella");
oConn.Close();

GridView1.DataSource = ds.Tables["tabella"].DefaultView;
GridView1.DataBind();
}


alcuni parametri sono commentati perchè li userò più tardi...
quando vado a riempire le casele di testo che forniscono i parametri e clicco sul button1 mi dice che c'è un errore perchè violo il vincolo di chiave primaria, e guardando il datatbase vedo che il record in effetti è già inserito.. quindi è come se io cercassi di inserire due volte lo stesso record, sebbene il form io lo compili una sola volta e clicchi sul pulsante una sola volta...
ho provato ad usare all'inizio del button1_click il codice
if (! ispostback)
e stavolta l'0aggiornamento non lo fa proprio...

e poi una cosa strana: avete notato l'uso del selectcommand sebbene io voglia implementare una insert?
usando executenonquery non mi crea problemi, ma nel momento in cui metto insertcommand al posto di selectcommand mi fa capire che non riconosce il cambiamento...

uso una stored per l'inserimento (non l'ho postata perchè non credo che il problema sia lì visto che i record li inserisce... a modo suo ma li inserisce...), inoltre uso sqlserver 2005 e c#


è una reazione strana che non mi spiego... cosa succede e come posso risolvere?
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

nullatore Profilo | Junior Member

per come stai usando tu il codice
>>adatt.SelectCommand.ExecuteNonQuery();
e
>>adatt.Fill(ds,"tabella");

fanno la stessa cosa e quindi 2 volte l'inserimento (ecco l'errore del vincolo PK).
Non credo ti serva il SqlAdapter in questo caso.
Fai cosi:

apri la connessione
mettici in mezzo:
SqlCommand sqlcom = new SqlCommand();
sqlcom.Connection=<inserisci qui il tuo oggetto connessione>;
sqlcom.CommandType = CommandType.StoredProcedure;
sqlcom.CommandText = "nome_sp";

sqlcom.Parameters.Add(new SqlParameter("@parametro1", SqlDbType.Int).Value = 3);
sqlcom.Parameters.Add(new SqlParameter("@parametro2", SqlDbType.Int).Value = 5);
sqlcom.Parameters.Add(new SqlParameter("@parametro3", SqlDbType.Int).Value = 7);
sqlcom.ExecuteNonQuery();

e chiudi la connessione.


~nullatore~
mai dire corto circuito virtuale

nullatore Profilo | Junior Member

Io volevo chiederi invece il perchè dell'uso del metodo Server.HtmlEncode().
E' una domanda senza malizia, solo perche' io non l'ho mai usato...


~nullatore~
mai dire corto circuito virtuale

_J_ Profilo | Senior Member

ciao nullatore

io credevo che executenonquery lavorasse insieme al fill, cioè che i due si potessero usare assieme..

ho visto che tu hai dichiarato 'apertamente'
SqlCommand sqlcom = new SqlCommand();
sqlcom.Connection=<inserisci qui il tuo oggetto connessione>;
sqlcom.CommandType = CommandType.StoredProcedure;
sqlcom.CommandText = "nome_sp";

mentre io ho usato il configuration manager... in teoria dovrebbe essere lo stesso anche con executenonquery...

l'adapter lo usavo perchè, dopo l'inserimento, volevo riempire un datagrid con i recod man mano aggiunti... cmq proverò senza fill e poi ti dirò.. intanto grazie

Server.HtmlEncode() lo uso mentre prendo i parametri da alcune textbox, label ecc.. e serve per conservare la formattazione delle stringhe che si prelevano, senza vedere stringhe strane del tipo &deg, &nbsp ecc per codificare virgolette, spazi...

_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

_J_ Profilo | Senior Member

togliendo il fill lavora alla grande (grazie!)
se non fosse per i parametri commentati che mi stanno creando un mare di problemi quando li decommento... vedi il mio nuovo post e capirai..

sull'azzeramento del form e sul caching ti risponderò a breve, ho risolto prima 'sta cosa

grazie ancora!
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5