Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Controllo duplicati...

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

    Controllo duplicati...

    Come controllo di non inserire dati duplicati???

    Sto facendo così ma ci sono un paio di errori....
    codice:
    		public static void insertRecord (string tableName, string nome, string TxtbStato)
    		{
     
    			OleDbConnection conn = new OleDbConnection(connString);
    			conn.Open();
    			OleDbCommand comm = new OleDbCommand("SELECT * FROM " + tableName +" WHERE " + nome +"=" + TxtbStato ,conn);
    			DataTable MyTable = new DataTable();
    			DA.Fill(MyTable);
    			if (MyTable=="")
    			{
    				OleDbCommand comm = new OleDbCommand("insert into " + tableName + " ( " + nome + ") values ('" + TxtbStato + "')",conn);
    				comm.ExecuteNonQuery();
    				conn.Close(); 
    			}
    			else
    			{
    				Response.Write("dato già presente");
    			}
    		}
    1- c:\inetpub\wwwroot\ppp\areariservata\Access.cs(39) : The type or namespace name 'DA' could not be found (are you missing a using directive or an assembly reference?)

    2- c:\inetpub\wwwroot\ppp\areariservata\Access.cs(40) : Operator '==' cannot be applied to operands of type 'System.Data.DataTable' and 'string'

    3- c:\inetpub\wwwroot\ppp\areariservata\Access.cs(42) : A local variable named 'comm' cannot be declared in this scope because it would give a different meaning to 'comm', which is already used in a 'parent or current' scope to denote something else

    4- c:\inetpub\wwwroot\bacchi\areariservata\Access.cs( 48): The type or namespace name 'Response' could not be found (are you missing a using directive or an assembly reference?)

  2. #2
    1) DA che cose? dove lo hi istanziato? Dovrebbe essere un dataAdapter ma non è dichiarato da nessuna parte.
    2) stai confrontando una tabella con una stringa, non si può fare, per vedere se ci sonorecord nel datatable usa (MyTable .Rows.Count==0).
    3) comm lo hai già dichiarato, non serve ridichiararlo un'altra volta, basta cambiare il commandtext, fai cosi:
    codice:
    comm.CommandText="insert into " + tableName + " ( " + nome + ") values ('" + TxtbStato + "')"
    4) probabilmente il codice non l'hai messo su una pagina ma in una classe esterna, che quindi non vede l'oggetto response.

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie mi sei stata di aiuto
    Nutro però ancora qualche problema...

    Essendo si in una classe ho risolto in questo modo:
    codice:
    		public static Risp insertRecord (string tableName, string nome, string TxtbStato)
    		{
    			OleDbConnection conn = new OleDbConnection(connString);
    			conn.Open();
    			OleDbCommand comm = new OleDbCommand("SELECT * FROM " + tableName +" WHERE " + nome +"=" + TxtbStato ,conn);
    			OleDbDataAdapter DA = new OleDbDataAdapter(comm);
    			DataTable MyTable = new DataTable();
    			DA.Fill(MyTable);
    			if (MyTable.Rows.Count==0)
    			{
    				comm.CommandText="insert into " + tableName + " ( " + nome + ") values ('" + TxtbStato + "')";
    				comm.ExecuteNonQuery();
    				conn.Close(); 
    			}
    			else
    			{
    				Risp="dato già presente";
    				return Risp;
    			}
    		}
    E poi sul file.cs della mia pagina al click del bottone salva faccio questo:

    codice:
    		private void ButStato_Click(object sender, System.EventArgs e)
    		{
    			try
    			{
                    string tableName = "stati";	
    				string nome = "stato";
    				Access.insertRecord( tableName, nome, txtbStato.Text);
    				Risposta.Text="Dati inseriti correttamente";
    				txtbStato.Text="";
    			}
    			catch
    			{
    				if (txtbStato.Text=="")
    				{
    					Risposta.Text="Devi completare il campo";
    				}
    				else
    					if (Risp=="")
    					{
    					Risposta.Text="Operazione non eseguita";
    					}
    					else
    					{
    					Risposta.Text="Dato già inserito";	
    					}
    			}
    		}
    L'errore è sulla classe ed è:
    c:\inetpub\wwwroot\bacchi\areariservata\Access.cs( 23): The type or namespace name 'Risp' could not be found (are you missing a using directive or an assembly reference?)

  4. #4
    per far ritornare un valore ad una funzione, prima del nome della funzione devi mettere il tipo ritornato (quando non c'è è void) e ritornarlo con return, mentre te hai messo un nome di variabile e hai tentato di valorizzarla:
    codice:
    public static string insertRecord (string tableName, string nome, string TxtbStato)
    	{
    	.....
    		else
    		{
    			return "dato già presente";
    		}
    	}

  5. #5
    Originariamente inviato da Sonikag
    Grazie mi sei stata di aiuto
    stato




















  6. #6
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Mmm... ho perso un pezzo...

    Non capisco...

    Allora facendo come hai scritto tu (copiato pari pari) mi da l'errore:

    c:\inetpub\wwwroot\ppp\areariservata\Access.cs(23) : 'bacchi.Access.insertRecord(string, string, string)': not all code paths return a value

    Su:

    public static string insertRecord (string tableName, string nome, string TxtbStato)

    ---

    Quello che non capisco è: non devo dare un nome alla stringa che viene restituita? se non ha nome come faccio il controllo nella mia pagina? Se non va nell'else dalla classe non ritorna nessun dato... va bene lo stesso o sono obbligata a far ritornare qualcosa visto che ho tolto il void?

  7. #7
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Stato stato... sarà l'effetto che su 2 giorni mi hanno tamponato 2 volte Stato, stato, stato, stato...

  8. #8
    il nome alla stringa restituita non devi sarlo perchè e restituita tramite "return", quindi non c'è nessuna variabile da valorizzare. Dall'altra parte (sul bottone) per leggere il valore ritornato dalla funzione basta che lo valorizzi da qualche parte, ad esempio cosi:
    codice:
    Risposta.Text=Access.insertRecord( tableName, nome, txtbStato.Text);
    Per quanto riguarda l'errore, ti viene dato perchè non in tutti i casi ritorni un valore (se la condizione è vera) mentre un valore deve sempre essere ritornato, per risolvere basta che metti un
    codice:
    return "";
    in fondo alla funzione, poi vedi te se vuoi metterci un messaggio o lasciare una stringa vuota.

  9. #9
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Devo dire che sono un po' tanto tarda, ma prima o poi sto asp.net lo imparerò! dunque...

    Classe:
    codice:
    		public static string insertRecord (string tableName, string nome, string TxtbStato)
    		{
    			OleDbConnection conn = new OleDbConnection(connString);
    			conn.Open();
    			OleDbCommand comm = new OleDbCommand("SELECT * FROM " + tableName +" WHERE " + nome +"=" + TxtbStato ,conn);
    			OleDbDataAdapter DA = new OleDbDataAdapter(comm);
    			DataTable MyTable = new DataTable();
    			DA.Fill(MyTable);
    			if (MyTable.Rows.Count==0)
    			{
    				comm.CommandText="insert into " + tableName + " ( " + nome + ") values ('" + TxtbStato + "')";
    				comm.ExecuteNonQuery();
    				conn.Close(); 
    				return "";
    			}
    			else
    			{
    				return "dato già presente";
    			}
    		}
    Codice pag:
    codice:
    		private void ButStato_Click(object sender, System.EventArgs e)
    		{
    			try
    			{
                    string tableName = "stati";	
    				string nome = "stato";
    				Access.insertRecord(tableName, nome, txtbStato.Text);
    				Risposta.Text="Dati inseriti correttamente";
    				txtbStato.Text="";
    			}
    			catch
    			{
    				if (txtbStato.Text=="")
    				{
    					Risposta.Text="Devi completare il campo";
    				}
    				else
    				{
    					string tableName = "stati";	
    					string nome = "stato";
    					string Ris = Risposta.Text=Access.insertRecord(tableName, nome, txtbStato.Text);
    						if (Ris=="")
    						{
    							Risposta.Text="Operazione NON eseguita";
    						}
    						else
    						{
    							Risposta.Text=Ris;
    						}
    				}
    			}
    In fase di compilazione tutto ok... ma quando inserisco un dato mi da questo 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 38: OleDbDataAdapter DA = new OleDbDataAdapter(comm);
    Line 39: DataTable MyTable = new DataTable();
    Line 40: DA.Fill(MyTable);
    Line 41: if (MyTable.Rows.Count==0)
    Line 42: {


    Source File: c:\inetpub\wwwroot\ppp\areariservata\access.cs Line: 40

  10. #10
    se il campo su cui fai la where e una stringa mancano gli apici
    [code]
    OleDbCommand comm = new OleDbCommand("SELECT * FROM " + tableName +" WHERE " + nome +"='" + TxtbStato +"'" ,conn);
    [Code] altrimenti cerca di stamparti la stringa SQL di comm, l'errore deve essere nella query

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.