Aggiornamento DataBase tramite un adattatore dati

mercoledì 21 gennaio 2009 - 16.23

Leonida Profilo | Junior Member

Salve a tutti,

Ho scritto il seguente codice di prova(postato in parti ormai in diversi thread):

protected void BCarica_Click(object sender, EventArgs e)
{

string stringaDiConnessione = "Data Source=.\\SQLEXPRESS;" +
"AttachDbFilename=|DataDirectory|\\Utenti.mdf;" +
"Integrated Security=True;" +
"User Instance=True";
string query = " SELECT nome, cognome, CF FROM Utenti,Residenza;";

SqlConnection connessione = new SqlConnection(stringaDiConnessione);
adapter = new SqlDataAdapter(query, connessione);
data = new DataSet();

adapter.Fill(data, "Utenti");

DataTable table = null;
DataColumn column = null;
DataRow row = null;

table = data.Tables["Utenti"];
column = table.Columns[0];
row = table.Rows[0];

TBNome.Text = row[column].ToString();

row["nome"] = "Leo";


}

protected void BVisualizza_Click(object sender, EventArgs e)
{
GVUtenti.DataSource = data;
GVUtenti.DataBind();

adapter.Update(data, "Utenti");
}

"adapter" e "data" sono parametri della classe. Esegue la lettura di informazioni dal DataSet e l'aggiornamento senza problemi, però quando deve aggiornare il DB tramite Update, mi solleva un'eccezione.

Ho pensato fosse un problema relativo al fatto che il DS viene caricato tramite Join, allora ho provato a caricare dati da una sola tabella del DB ma da sempre lo stesso problema. Potete aiutarmi?!

Ho già letto quanto scritto su MSDN a tale proposito.

Jeremy Profilo | Guru

Che tipo di eccezione????
Dicci almeno il tipo e il Messaggio.....

Ciao.

alx_81 Profilo | Guru

>Salve a tutti,
Ciao, a parte che come dice Jeremy devi cercare di essere più corretto nella spiegazione del problema (vedi l'eccezione ed il messaggio di errore), forse posso ipotizzare un problema.
Vedo che tu popoli il tuo dataset tramite la pressione di un pulsante, gestito dall'evento BCarica_Click.
Ok, il caricamento va, ma poi riusi lo stesso dataset nell'altro evento. Siccome l'esecuzione poi non riesegue il BCarica_Click, perchè hai premuto l'update, secondo me ottieni una ArgumentNullException, perchè il dataset è Null. Se l'errore è quello, fai un bel metodo che ricava i dati e richiamalo nella BCarica_Click, ma anche nella BVisualizza_Click. Sennò la variabile data non è correttamente popolata.
Ti dico, con le poche informazioni che abbiamo, il tuo codice potrebbe dare l'idea che si tratti di quell'errore, ma se non è così, ti invito ad essere più preciso.
Ciao!
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Leonida Profilo | Junior Member

Mi da una InvalidOperationException sul metodo update. Allora ho seguito le indicazioni su MSDN definendo la query di aggiornamento ma mi da una DBConcurrencyException su update.

Il DataSet è un parametro static, quindi viene letto senza problemi. Sicuramente l'errore è banale, ma è la prima volta che lavoro con ADO.NET e non so proprio dove mettere mano, sto andando a tentativi.

Leonida Profilo | Junior Member

Ok,capito come funziona la gestione non connessa del DB, usando le sotred procedure non mi da problemi. Con i DataAdapter mi da in vece un errore sui parametri, posto il codice:

...

DataTable table = data.Tables["Utenti"];
DataColumn column = table.Columns["nome"];
DataRow row = table.Rows[0];

GVUtenti.DataSource = data;
GVUtenti.DataBind();

String updateUtenti = " UPDATE Utenti SET nome=@nome, congnome=@cognome WHERE CF=@CF; ";
adapter.UpdateCommand = new SqlCommand(updateUtenti, connessione);

adapter.UpdateCommand.Parameters.Add("@nome", SqlDbType.VarChar, 50, row[column].ToString());

column = table.Columns["cognome"];
row = table.Rows[0];

adapter.UpdateCommand.Parameters.Add("@cognome", SqlDbType.VarChar, 50, row[column].ToString());

column = table.Columns["CF"];
row = table.Rows[0];

adapter.UpdateCommand.Parameters.Add("@CF", SqlDbType.VarChar, 50, row[column].ToString());

connessione.Open();

adapter.Update(data, "Utenti");

...

Mi stampa il msg di errore:

La query con parametri '(@nome varchar(50),@cognome varchar(50),@CF varchar(50)) UPDATE ' prevede il parametro '@nome', che non è stato specificato

Mi sembra di passare correttamente i parametri, non riesco a trovare l'errore, mi potete aiutare?

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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5