Help!!!!!System.NullReferenceException su Dictionary

sabato 26 giugno 2010 - 14.14

aiser86 Profilo | Newbie

Ciao ragazzi sono nuuovo di quì e anche un pò nuovo del mestiere;
ho un problemino mel passare un dicrionary al mio metodo in quanto continua ad andare in System.NullReferenceException e non entra proprio nel metodo!
il Dictionary che gli passo ho controllato è valorizza ma poi schioppa!!! dove sbaglio?!?!?
Di seguito il codice:
string codice="000"
Dictionary <string,string> list=new Dictionary <string,string>();
//riempio il dictionari prendendo i valori dalla mascara di controlli
list.Add("prezzoLordo", txtLordo.Text.Trim().ToUpper().ToString());
...
dbU.setProdotto(codice, list)



//questo è il metodo che dovrebbe chiamare ma nel quale in realtà non entra...
public Boolean setProdotto(string codice,Dictionary<string,string> list)
{
MySqlCommand cmd = new MySqlCommand();
MySqlConnection cnn = new MySqlConnection();


Boolean bVal = true;
string idProdotto = null;

cnn = openConnetion();
MySqlTransaction t = cnn.BeginTransaction();
cmd.Transaction = t;
try
{

cmd.Connection = cnn;


cmd.CommandText = "INSERT INTO prodotto (DescProd,codCatRif,codSettRif,codSottoSettRif,codProdotto,prezzoListino,sconto,scontoExtra,prezzoNetto,costoTransporto,percIva,descFornitore,dataAcquisto,dataInserimento,dataModifica,flgValido)" +
"VALUE ('" + list["DescProd"] + "'+'" + list["codCat"] + "','" + list["codSett"] + "','" + list["codSottoSett"] + "','" + codice + "', '" + list["prezzoListino"] + "','" + list["sconto"] + "','" + list["extra"] + "','" + list["prezzoNetto"] + "','" + list["transporto"] + "','" + list["iva"] + "','" + list["descFornitore"] + "','" + list["dataAcquisto"] + "','" + System.DateTime.Today.ToString("yyyy-MM-dd") + "','" + System.DateTime.Today.ToString("yyyy-MM-dd") + "','1')";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
t.Commit();
bVal = true;

if (bVal == true)
{
//recupero l'id_prodotto appena inserito
cmd.CommandText = "Select idProdotto from prodotto where flgValido='1'and codProdotto='" + codice + "'";
cmd.CommandType = CommandType.Text;
MySqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
idProdotto = dr.GetString("idProdotto");
}
}

if (idProdotto != null)
{
cmd.CommandText = "INSERT INTO giacenza (idProdotto,qtaNegozio,qtaRetro,qtaMagazzino1,qtaMagazzino2,qtaScorta,qtaTot,dataAcquisto,dataInserimento,dataModifica,flgValido)" +
"VALUE ('" + int.Parse(idProdotto) + "'+'" + int.Parse(list["qtaNeg"]) + "','" + int.Parse(list["qtaRetro"]) + "','" + int.Parse(list["qtaMag1"]) + "','" + int.Parse(list["qtaMag2"]) + "', '" + int.Parse(list["qtaScorta"]) + "','" + int.Parse(list["qtaTot"]) + "','" + list["dataAcquisto"] + "','" + System.DateTime.Today.ToString("yyyy-MM-dd") + "','" + System.DateTime.Today.ToString("yyyy-MM-dd") + "','1')";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
t.Commit();
bVal = true;
}
else
{
cmd.CommandText = "DELETE FROM prodotto where idProdotto='" + idProdotto + "'";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
t.Commit();
bVal = false;
}
if (bVal == true)
{

cmd.CommandText = "INSERT INTO listino (idProdotto,listino50,listino30,listino15,listino50effettivo,listino30effettivo,listino15effettivo,dataInserimento,dataModifica,flgValido)" +
"VALUE ('" + int.Parse(idProdotto) + "'+'" + int.Parse(list["listino50"]) + "','" + int.Parse(list["listino30"]) + "','" + int.Parse(list["listino15"]) + "','" + list["listino50effettivo"] + "', '" + list["listino30effettivo"] + "','" + list["listino15effettivo"] + "','" + System.DateTime.Today.ToString("yyyy-MM-dd") + "','" + System.DateTime.Today.ToString("yyyy-MM-dd") + "','1')";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
t.Commit();
bVal = true;

}
else
{
cmd.CommandText = "DELETE FROM prodotto where idProdotto='" + idProdotto + "'";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

cmd.CommandText = "DELETE FROM giacenza where idProdotto='" + idProdotto + "'";
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

t.Commit();

bVal = false;
}

closeConnetion(cnn);
//string dateString = DateTime.Now.ToString("yyyy-MM-dd");

//closeConnetion(cnn);
return bVal;





}
catch (Exception e)
{
t.Rollback();
closeConnetion(cnn);
Console.Write(e.Message);
return bVal;

}

}


DOVE STO SBAGLIANDO?!?!?!?
Grazie Mille!

AntCiar Profilo | Expert

Ciao.

Quando passi il tuo dizionario alla sub, il dizionario è inizializzato qunidi non può andarti in errore. Anche se fosse Null ti andrebbe in errore in fase di accesso ad un elemento e non in fase di Call della sub.

secondo me il problema sta nel reperire i dati dal dizionario. Il metodo di accesso all'elemento specifico mediante la chiave (nel caso tuo una stringa) è case sensitive. Se nel dizionario metti questo elemento (chiave, valore) "prezzoLordo", "22.55" e poi quando vai a leggere cerchi di accedere con la chiave "prezzolordo", ti va in errore. Controlla bene i valori che inserisci. Poi se posso darti un consiglio quando li inserisci o li leggi usa un ToLower() o un ToUpper() così eviti problemi di questo tipo.

Ciao ciao
Cristian Barca

aiser86 Profilo | Newbie

Ciao,
grazie per la risposta, faccio già tutto quello che mi hai consigliato, in realtà la mia ignoranza mi ha portato in un metodo richiamato in precedenza a mettere a null la variabile dbU!!!
sono una pippa...
:D
grazie per la disponibilità nel rispondere.
Ciao
Christian
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