Visualizzazione dei risultati da 1 a 9 su 9

Discussione: inserimento in db

  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    inserimento in db

    Ho fatto un inserimento in un db con dei parametri e penso di aver fatto un po' di confusione. Per prima cosa controllo che il dato non sia già presente, se non c'è lo inserisco.

    codice:
    string connString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
    
    //creo l'oggetto connection e gli passo la stringa di connessione
    					OleDbConnection conn = new OleDbConnection(connString);
    //faccio l'Open della connessione
    conn.Open();
    					
    string strSQL = "SELECT * FROM " + tableName + " WHERE nome=@descrizione ";
    					
    OleDbDataAdapter DA = new OleDbDataAdapter(strSQL, conn);
    					
    OleDbCommand cmd = new OleDbCommand(strSQL, conn);
    					
    // parametri
    OleDbParameter parameter1 = new OleDbParameter("@descrizione", OleDbType.VarChar);
    parameter1.Value = Server.HtmlEncode(TxtbStato.Text);
    cmd.Parameters.Add(parameter1);
    DataTable MyTable = new DataTable();
    DA.Fill(MyTable);
    //controllo se il dato immesso esiste
    if (MyTable.Rows.Count==0)
    {
    cmd.CommandText="insert into " + tableName + " ( " + nome + ") values ('" + TxtbStato.Text + "')";
    cmd.ExecuteNonQuery();
    conn.Close(); 
    Risposta.Text="Dati inseriti correttamente";
    }
    else
    {	
    Risposta.Text="Dato Presente";
    }
    Errore:
    Nessun valore specificato per alcuni parametri necessari.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.Data.OleDb.OleDbException: Nessun valore specificato per alcuni parametri necessari.

    Source Error:


    Line 91:
    Line 92: DataTable MyTable = new DataTable();
    Line 93: DA.Fill(MyTable);
    Line 94: //controllo se il dato immesso esiste
    Line 95: if (MyTable.Rows.Count==0)

    Sonia

  2. #2

    Re: inserimento in db

    ho sintetizzato il tuo codice
    - codice = - errori e - confusione
    codice:
    string connString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];					
    string strSQL = "SELECT * FROM " + tableName + " WHERE nome=@descrizione ";					
    OleDbDataAdapter DA = new OleDbDataAdapter(strSQL, "connString");
    DA.selectcommand.Parameters.Add("@descrizione", OleDbType.VarChar).Value = Server.HtmlEncode(TxtbStato.Text); 
    DataTable MyTable = new DataTable();
    DA.Fill(MyTable);
    Per'altro, non mi sembra una buona idea scomodare un dataadapter e una datatable per verificare se un record c'e' oppure no. Sarebbe ad esempio meglio utilizzare un singolo command e la sua funzione executescalar. Un esempio (ma occhio alla sintassi lo scrivo giusto per darti uno spunto)
    codice:
    try
    {
    OleDbCommand cmd = new OleDbCommand("SELECT COUNT(*) FROM TABELLA WHERE Descrizione = ?Descrizione", conn);
    cmd.parameter.add("descrizione", OleDbType.VarChar).Value = Server.HtmlEncode(TxtbStato.Text); 
    conn.open(); 
    (int) count = cmd.executescalar();
    } finally {
    conn.close();
    }
    http://freeasp.html.it/articoli/view...olo.asp?id=241
    Saluti a tutti
    Riccardo

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    grazie.

    mmm... però sto facendo un po' di confusione...
    Come mai il conn.close nel finally?
    Inoltre ho questo errore su

    DA.selectcommand.Parameters.Add("@descrizione", OleDbType.VarChar).Value = Server.HtmlEncode(TxtbStato.Text);


    C:\Inetpub\wwwroot\ppp\areariservata\descrizioniin s.aspx.cs(77): 'System.Data.OleDb.OleDbDataAdapter' does not contain a definition for 'selectcommand'

    Sonia

  4. #4
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Ho scovato l'errore. Selected con S maiuscola.... ma l'altro dubbio rimane

    Nel frattempo se provo ad inserire qualcosa è sbucato questo errore:

    Format of the initialization string does not conform to specification starting at index 0.
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.

    Source Error:


    Line 74: string connString = System.Configuration.ConfigurationSettings.AppSett ings["ConnectionString"];
    Line 75: string strSQL = "SELECT * FROM " + tableName + " WHERE nome=@descrizione ";
    Line 76: OleDbDataAdapter DA = new OleDbDataAdapter(strSQL, "connString");
    Line 77: DA.SelectCommand.Parameters.Add("@descrizione", OleDbType.VarChar).Value = Server.HtmlEncode(TxtbStato.Text);
    Line 78: DataTable MyTable = new DataTable();



    Sonia

  5. #5
    Utente di HTML.it L'avatar di Franz78
    Registrato dal
    Sep 2004
    Messaggi
    730
    la puoi semplificare ulteriormente....
    prova a non utilizzare il dataadapter ma solo un comando con executescalar come diceva riccardone, ti rimane una sintassi + pulita e + facile da gestire....

    e questo errore in che riga lo da?

  6. #6
    Originariamente inviato da Sonikag
    Nel frattempo se provo ad inserire qualcosa è sbucato questo errore:
    Non ho guardato bene il codice ma la prima cosa che mi salta all'occhio e' che trattandosi di oledb i parametri per questo dataprovider vengono identificati dal segno "?" e non "@". Quest'ultimo invece si usa per il dataprovider sqlclient di sqlserver.
    Saluti a tutti
    Riccardo

  7. #7
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    In questo modo funziona:

    codice:
    					string connString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
    
    					OleDbConnection m_conn = new OleDbConnection(connString);
    					OleDbCommand m_cmd; 
    					OleDbDataReader m_reader;  
    
    					m_cmd = m_conn.CreateCommand(); 
    					m_cmd.CommandText = "SELECT * FROM " + tableName + " WHERE descrizione=@descrizione ";
    					m_cmd.Parameters.Add("@descrizione", OleDbType.VarChar).Value = Server.HtmlEncode(TxtbStato.Text); 
    					m_cmd.CommandType= CommandType.Text; 
    					m_conn.Open(); 
    					m_reader = m_cmd.ExecuteReader(); 
    					if (m_reader.Read()) 
    					{
    						Risposta.Text="Dato Presente";					}
    					else
    					{
    					Risposta.Text="Dato non presente";
    						}

    Adesso però dove c'è dato non presente devo fare una query di inserimento! creo un cmd2? metodo corretto? o come credete sia meglio agire...

    Sonia

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    1,482
    C# è case sensitive se non sbaglio

    OleDbConnection
    OleDbCommand
    OleDbDataAdapter
    OleDbDataReader

    credetemi non ho bevuto...

    Hey hey, my my Rock and roll can never die!

  9. #9
    Originariamente inviato da Sonikag
    Adesso però dove c'è dato non presente devo fare una query di inserimento! creo un cmd2? metodo corretto? o come credete sia meglio agire...
    Il metodo di usare un command per inserire un record nel db non e' sbagliato. Ma cosi come hai scritto il tuo codice dovresti stare attenta ad utilizzare una nuova connessione visto che il datareader tiene aperta la sua finche non viene chiuso. Per questa ragione, il tuo codice e' migliorabile escludendo il datareader, facendo una query che fa un SELECT COUNT(*) FROM ... WHERE e verificando se questa query torna un valore superiore a 0 con la funzione executescalar del command.
    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.