Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    95

    Errore strano (che non si verifica sempre) nel salvataggio di valori

    Ho un datagrid che contiene un elenco di textbox nei quali devo inserire una ripartizione che da 100

    ho un problema... la pagina a volte mi va in errore

    "The connection is already Open (state=Open)"

    mi sembra di aver capito che:

    se inserisco pochi valori (es: 40,40,20) è tutto ok;


    ma se inserisco piu valori (20,20,20,20,10,10) ottengo l'errore: The connection is already Open (state=Open).


    il codice è questo..... dove sbaglio??????

    if (TotPerc.Text == "100")

    {



    // cancello tutti i dati presenti nella tabella ripartizione ldb per la riga selezionata

    OleDbCommand myCommandDel = new OleDbCommand("SP_FatturaLibera_Ldb_Delete",myConne ctionDelete);

    myCommandDel.CommandType=CommandType.StoredProcedu re;

    myCommandDel.Parameters.Add("@IDRiga", OleDbType.VarChar);

    myCommandDel.Parameters["@IDRiga"].Value = IDRiga;




    try

    {

    myConnectionDelete.Open();

    myCommandDel.ExecuteNonQuery();

    myConnectionDelete.Close();

    }

    catch (Exception exc)

    {

    DebugErrore.Text = exc.Message;

    myConnectionDelete.Close();

    }





    foreach(DataGridItem item in MyDataGrid.Items)

    {

    string ldb = ((Label)item.FindControl("IDVoce")).Text;

    string importo = ((TextBox)item.FindControl("TotaleText")).Text;


    try

    {


    OleDbCommand myCommand = new OleDbCommand("SP_FatturaLibera_LdbInsert", myConnectionIns);

    myCommand.CommandType=CommandType.StoredProcedure;



    myCommand.Parameters.Add(new OleDbParameter("@NumeroFattura", OleDbType.VarChar));

    myCommand.Parameters.Add(new OleDbParameter("@IDRiga", OleDbType.VarChar));

    myCommand.Parameters.Add(new OleDbParameter("@LDB", OleDbType.VarChar));

    myCommand.Parameters.Add(new OleDbParameter("@Valore", OleDbType.VarChar));




    if (NumeroFattura.ToString() != "")

    {

    myCommand.Parameters["@NumeroFattura"].Value = NumeroFattura.ToString();

    }

    else

    {

    myCommand.Parameters["@NumeroFattura"].Value = DBNull.Value;

    }





    myCommand.Parameters["@IDRiga"].Value = IDRiga.ToString();




    if (ldb.ToString() != "")

    {

    myCommand.Parameters["@LDB"].Value = ldb;

    }

    else

    {

    myCommand.Parameters["@LDB"].Value = DBNull.Value;

    }





    if (importo.ToString() != "")

    {

    myCommand.Parameters["@Valore"].Value = importo;

    }

    else

    {

    myCommand.Parameters["@Valore"].Value = "0";

    }



    myConnectionIns.Open();

    myCommand.ExecuteNonQuery();

    myConnectionIns.Close();




    }

    // intercettto l'errore di un'eventuale concorrenza nella scrittura

    catch (Exception exc)

    {

    DebugErrore.Text = exc.Message;


    }


    }





    // chiudo la finestra per le ripartizioni LDB

    string scriptString;

    scriptString = "<script language=JavaScript>";

    scriptString = scriptString + "window.close();";

    scriptString = scriptString + "</script>";

    Page.RegisterClientScriptBlock("clientScript", scriptString);





    }

    // fine if

    else

    {

    DebugErrore.Text = "Il totale della ripartizione delle LDB deve dare 100%";

    }

  2. #2
    Quando associ una connection ad un command per eseguire una serie di comandi, tuaconnection.open lo dovresti mettere prima del ciclo (prima del for each) e tuaconnection.close lo metti (fuori dal ciclo) nel blocco finally del try es.
    codice:
    try	
    {
    tuaconnection.open 
    for each ....
    }
    finally
    {
    tuaconnection.close
    }
    Saluti a tutti
    Riccardo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.