Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Store procedure aiutoooo

    ciao,
    vorrei creare una store procedue in questo modo. Praticament passare alla funzione la query e la collection dei parametri.

    ho provato in questo modo:
    myparam.Add("@User", this.txtUserName.Text);
    myparam.Add("@Pwd", this.txtPassword.Text);
    myparam.Add("@table", "myTable");
    myparam.Add("@condizione","UserName=@User AND Password=@Pwd");

    però ho difficoltà nel dichiarare myparam, ho provato con OdbcParameterCollection ma mi segnala sempre qualcosa.

    objDatabase.SelezionaRecord("SELECT * FROM @table WHERE @condizione");

    la funzione SelezionaRecord fa questo:

    codice:
    public OdbcDataReader SelezionaRecord(string strQUERY, OdbcParameterCollection objParams)
    {
    	try
    	{
    		objConn = new OdbcConnection(ConnectionString);
    		objCmd  = new OdbcCommand(strQUERY, objConn);
    		 objCmd.Parameters=objParams; 
    		objCmd.Connection.Open();
    		return objCmd.ExecuteReader(CommandBehavior.CloseConnection);
    	}
    	catch(OdbcException ex)
    	{
    		return null;
    	}
    }
    teoricamente dovrebbe leggere la collection e piazzarla dentro al objCmd.

    Chi mi aiuta?

  2. #2

    Re: Store procedure aiutoooo

    Originariamente inviato da Daniele80
    vorrei creare una store procedue in questo modo.
    non credo tu possa usare direttamente una collection di parametri. Cmq, il modo migliore per aggiungere un parametro ad un command credo sia il seguente
    codice:
    tuoCommand.Parameters.Add("nome", System.Data.OleDb.OleDbType.VarChar).Value = "valore";
    se poi il valore o i valori li vuoi passare da fuori, potresti fare una funzione che accetta un array di oggetti con dentro i valori. All'interno della funzione, il compito di tirar fuori i valori capire di che tipo sono e valorizzare correttamente la collection parameters del command.
    vorrei creare una store procedue in questo modo
    Quella che hai scritto non e' una stored procedure. Queste ultime vengono memorizzate nel database e richiamate dal codice dell'applicazione con il loro nome.
    SELECT * FROM @table WHERE @condizione
    Non puoi mettere un parametro come nome della tabella. Semmai, fai passare la query come un parametro della funzione in modo da cambiarla, oppure fai un grezzo replace o string.format della query per sostituire a manina il nome della tabella.
    Saluti a tutti
    Riccardo

  3. #3
    ho scritto cosi:

    ho riscritto cosi:
    OdbcParameterCollection myparam = new OdbcCommand().Parameters;
    myparam.Add("@User", this.txtUserName.Text);
    myparam.Add("@Pwd", this.txtPassword.Text);
    myparam.Add("@table", "Admin");
    myparam.Add("@condizione","UserName=@User AND Password=@Pwd");

    ed ho questo errore:

    You have an error in your SQL syntax; check the manual that corresponds to
    your MySQL server version for the right syntax to use near '@table WHERE
    @condizione' at line 1

    quindi come risolvo?

  4. #4
    myparam.Parameters.Add("@User", SqlDbType.string);
    myparam.Parameters["@User"].Value = txtUserName.Text;
    myparam.Parameters.Add("@Password", SqlDbType.string);
    myparam.Parameters["@Password"].Value = txtPassword.Text;
    myparam.Parameters.Add("@condizione", SqlDbType.string);
    myparam.Parameters["@condizione"].Value = txtUserName.Text + txtPassword.Text;
    myparam.Parameters.Add("@table", SqlDbType.string);
    myparam.Parameters["@table"].Value = miavariabile;

  5. #5
    ho visto i vari esempi, però devo dire che io faccio tutto in un modo diverso

    codice:
    OdbcParameterCollection myparam = new OdbcCommand().Parameters;
    
    myparam.Add("@User", this.txtUserName.Text);
    myparam.Add("@Pwd", this.txtPassword.Text);
    myparam.Add("@table", "Admin");
    myparam.Add("@condizione","UserName=" + this.txtUserName.Text + " AND Password=" + this.txtPassword.Text);
    
    OdbcDataReader objReader;
    	
    objReader = objDatabase.SelezionaRecord("SELECT * FROM @table WHERE @condizione", myparam, ref this.lblError);
    
    
    public OdbcDataReader SelezionaRecord(string strQUERY, OdbcParameterCollection objParams, ref Label lblError)
    {
    	try
    	{
    		objConn = new OdbcConnection(ConnectionString);
    		objCmd  = new OdbcCommand(strQUERY, objConn);
    		objCmd.CommandType = CommandType.StoredProcedure;
    		for(int i=0;i<objParams.Count;i++)
    		{
    			objCmd.Parameters.Add(objParams[i].ParameterName, objParams[i].Value);
    		}
    		//objCmd.Parameters.Add(objParams);
    		objCmd.Connection.Open();
    		return objCmd.ExecuteReader(CommandBehavior.CloseConnection);
    	}
    	catch(OdbcException ex)
    	{
    	lblError.Text = ex.Message;
    	return null;
    	}
    }
    io devo passare in qualche modo i parametri e poi nella funzione eseguirli.

  6. #6
    Non capisco quello che chiedi, credo che ti serva di salvare i dati di un array nel database. Se così fosse non ti serve lanciare una funzione per il salvataggio ma semplicemente:
    crei un oggetto(OggettoParametri) con le proprietà che ti servono
    crei un array
    riempi l'array con i tuoi oggetti poi, nel salvataggio:

    - connessione
    - command
    OggettoParametri nomeOggettoParametri;
    - elenchi i parametri da passare es:
    myCommand.Parameters.Add("@User", String.Varchar, 50);
    -apri connessione
    nel ciclo for scrivi:
    for(int i=0; i<nomearray.Count; i++)
    {
    nomeOggettoParametri=(OggettoParametri)nomearray[i];
    myCommand.Parameters["@User"].Value = this.quello che e';
    myCommand.ExecuteNonQuery();
    }
    ti cicla tutte le righe dell'array e ti esegue la stored procedure che vuoi

  7. #7
    Originariamente inviato da Daniele80
    myparam.Add("@condizione","UserName=@User AND Password=@Pwd");
    Quello che hai scritto non e' un parametro. In piu', il segno @ contraddistingue i parametri di sqlserver mentre per i parametri odbc dovresti usare il segno ? e riportare al momento di aggiungere lo specifico parametro il suo nome. Es
    codice:
    tuoCommand.CommandText = "SELECT * FROM tabella WHERE tuocampo = ? AND tuoid = ?"
    tuoCommand.Parameters.Add("tuocampo", System.Data.OleDb.OleDbType.VarChar).Value = "valore";
    tuoCommand.Parameters.Add("tuoid ", System.Data.Odbc.OdbcType.Numeric).Value = 123;
    Saluti a tutti
    Riccardo

  8. #8
    raGAZZI necessito un'aiuto visto che non ne vengo a capo.

    utilizzo il db MySql

    io dal mio cs, richiamo una funzione che deve svolgere la query con le Execute.

    quindi gli devo passare in qualche modo la query con i vari campi ecc.


    mi aiutate a farla mi serve solo un esempio.

    mettete caso che devo fare questa operazione:

    INSERT INTO tb (nome) VALUES ('" + txt.Text + "')

    io vorrei parametrizzare la tabella, i nomi della query...tutto in pratica.


    ciao

  9. #9
    Originariamente inviato da Daniele80
    necessito un'aiuto visto che non ne vengo a capo.
    Il primo consiglio e' di aprire un nuovo thread per il tuo problema. MySql non ha neanche la possibilita' di utilizzare stored procedures.
    Qui c'e' un articolo sull'uso dei command http://freeasp.html.it/articoli/view...olo.asp?id=241
    Saluti a tutti
    Riccardo

  10. #10
    Continuo a non capire cosa ti serve io continuo a darti lo stesso consiglio:

    SqlCommand tuoCommand = new SqlCommand("tuaSP", tuaConn);
    tuoCommand.CommandType = CommandType.StoredProcedure;
    tuoCommand.Parameters.Add("@User", SqlDbType.Int);
    tuoCommand.Parameters.Add("@Pwd", SqlDbType.VarChar, 50);
    tuoCommand.Parameters.Add("@Table", SqlDbType.VarChar, 50);

    for(int i=0; i<tuoArray.Count; i++)
    {
    varControl=(tuoControllo)tuoArray[i];
    tuoCommand.Parameters["@User"].Value = TuoControllo.txtUserName;
    tuoCommand.Parameters["@Pwd"].Value = TuoControllo.txtPassword;
    tuoCommand.Parameters["@Table"].Value = TuoControllo.Admin;
    tuoCommand.ExecuteNonQuery();
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.