Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126

    [c#] Stored procedure di oracle su datareader

    ciao, ho creato una stored procedure su oracle che dovrebbe recuperarmi tutti i campi di una tabella:
    codice:
    CREATE OR REPLACE PROCEDURE "SYS"."SP_SELECT_ALL_CLIENTI" ( 
    return_rec out SYS.CLIENTI%ROWTYPE
    )
    is
    begin
    select * into return_rec from clienti;
    end;
    Non sò se ho fatto bene, cmq oracle me la compila senza errori.
    Fatto questo faccio la connessione al db, imposto il command.text con il nome della procedura, imposto il command.type su storedprocedure ed eseguo il comando executereader() su un datareader.
    Mi vien proposto questo errore
    PLS-00306: numero o tipi di argomenti errati nella chiamata di 'SP_SELECT_ALL_CLIENTI'
    c'è sicuramente qualche problema con i parametri.. ma mica devo impostare dei parametri anche su comando lato c# ?
    Scusate l'ignoranza
    Voglio l'alt+s anche per FF

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887

    Re: [c#] Stored procedure di oracle su datareader

    Originariamente inviato da dops
    ciao, ho creato una stored procedure su oracle che dovrebbe recuperarmi tutti i campi di una tabella:
    codice:
    CREATE OR REPLACE PROCEDURE "SYS"."SP_SELECT_ALL_CLIENTI" ( 
    return_rec out SYS.CLIENTI%ROWTYPE
    )
    is
    begin
    select * into return_rec from clienti;
    end;
    Non sò se ho fatto bene, cmq oracle me la compila senza errori.
    Fatto questo faccio la connessione al db, imposto il command.text con il nome della procedura, imposto il command.type su storedprocedure ed eseguo il comando executereader() su un datareader.
    Mi vien proposto questo errore

    c'è sicuramente qualche problema con i parametri.. ma mica devo impostare dei parametri anche su comando lato c# ?
    Scusate l'ignoranza
    se hai un parametro di output come mi sembra che sia return_rec (non conosco bene PLSQL), dovresti seguire una linea del genere (è un esempio con Userid e Password):

    codice:
     
    SqlConnection conn = new SqlConnection(stringaconnessione);
    SqlCommand cmdLogin;
    SqlParameter parValoreRitorno;
    
    cmdLogin = new SqlCommand("SP_LOGIN_ID", conn);
    cmdLogin.CommandType = CommandType.StoredProcedure;
    
    parValoreRitorno = cmdLogin.Parameters.Add("intID", SqlDbType.Int);
    parValoreRitorno.Direction = ParameterDirection.ReturnValue;
    
    cmdLogin.Parameters.Add("@USERID", SqlDbType.VarChar).Value = Nomeutente;
    cmdLogin.Parameters.Add("@PASSWORD", SqlDbType.VarChar).Value = Password;

  3. #3
    se hai una variabile di output devi ovviamente creare un parameter in output da .net, altrimenti non riesci a recuperare il risultato.
    cosa usi per connetterti al db/creare parametri? per oracle l'ideale è usare l'oracle client.net, da installare sul server. in caso contrario preparati a piangere per recuperare qualcosa di diverso da un intero (ci sono parecchi problemi nelle definizioni dei parametri senza un client adeguato, figurarsi di un recordset).
    quella stored procedure sei proprio sicuro che funzioni?? a me lascia un po' perplesso (ma non ho un server oracle dove provarla al momento). ti conviene crearti uno script plsql per testarla e assicurarti che faccia quel che deve prima di impazzire dietro al codice .net
    xxx

  4. #4
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    porca miseria, non credevo fosse così complicato con oracle richiamare una semplice stored procedure che deve ritornare un recordset. Cmq uso odp.net (prodotto di oracle, vorrei vedere che non funziona...) per il collegamento, e girando un attimo in rete ho visto che il metodo migliore per recuperare records da una sp di oracle è quello di creare un package con un ref cursor all'interno e "popolare" questo ref cursor in una stored procedure.. insomma un casino esagerato !!!!! .. e ancora non sono riuscito a farlo funzionare..
    Mah.. una curiosità.. con sql server se creo una sp che mi faccia un select * from tabella, basta che dal codice .net richiami quella sp impostando ovviamende il command type su storedprocedure.. insomma senza parametri e senza nulla.. faccio un ciclo sui dati ritornati dalla sp no?
    Voglio l'alt+s anche per FF

  5. #5
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    cmq, ho seguito questa guida e ci sono riuscito.. ma è alquanto assurdo..
    http://www.ondotnet.com/pub/a/dotnet...02.html?page=2
    Voglio l'alt+s anche per FF

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da dops
    porca miseria, non credevo fosse così complicato con oracle richiamare una semplice stored procedure che deve ritornare un recordset. Cmq uso odp.net (prodotto di oracle, vorrei vedere che non funziona...) per il collegamento, e girando un attimo in rete ho visto che il metodo migliore per recuperare records da una sp di oracle è quello di creare un package con un ref cursor all'interno e "popolare" questo ref cursor in una stored procedure.. insomma un casino esagerato !!!!! .. e ancora non sono riuscito a farlo funzionare..
    Mah.. una curiosità.. con sql server se creo una sp che mi faccia un select * from tabella, basta che dal codice .net richiami quella sp impostando ovviamende il command type su storedprocedure.. insomma senza parametri e senza nulla.. faccio un ciclo sui dati ritornati dalla sp no?
    si, interagendo con SQL Server, dal punto di vista del codice fai una funzioncina che restituisce un dataset o un datareader, e ne popoli uno istanziato all'occorrenza, per poi analizzarlo. Anche senza passare parametri (soltanto però se la stored non li richiede, ovviamente).

  7. #7
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da djciko
    si, interagendo con SQL Server, dal punto di vista del codice fai una funzioncina che restituisce un dataset o un datareader, e ne popoli uno istanziato all'occorrenza, per poi analizzarlo. Anche senza passare parametri (soltanto però se la stored non li richiede, ovviamente).
    vabbè anche senza funzioncina che restituisce un tipo.. quello che intendevo era se c'è bisogno di fare tutte queste storie anche con sql server.. quando ovviamente la sp non richiede nè inoltra parametri...
    Grazie
    Voglio l'alt+s anche per FF

  8. #8
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da Alethesnake
    se hai una variabile di output devi ovviamente creare un parameter in output da .net, altrimenti non riesci a recuperare il risultato.
    cosa usi per connetterti al db/creare parametri? per oracle l'ideale è usare l'oracle client.net, da installare sul server. in caso contrario preparati a piangere per recuperare qualcosa di diverso da un intero (ci sono parecchi problemi nelle definizioni dei parametri senza un client adeguato, figurarsi di un recordset).
    quella stored procedure sei proprio sicuro che funzioni?? a me lascia un po' perplesso (ma non ho un server oracle dove provarla al momento). ti conviene crearti uno script plsql per testarla e assicurarti che faccia quel che deve prima di impazzire dietro al codice .net
    Alethesnake, scusa.. ma non mi è tanto chiaro.. perchè se la sp ha una parametro in output, la direzione del parametro del codice .net deve essere anche lei in output.. concettualmente non dovrebbe essere in entrata ? :master:
    Voglio l'alt+s anche per FF

  9. #9
    In input sono i parametri che devi passare alla procedura, in output quelli che la procedura ti ritorna.
    che poi tu la richiami direttamente da sqlplus, piuttosto che da un'altra procedura o da un programma esterno fino ad una pagina asp, la cosa non cambia. altrimenti la cosa potrebbe ingenerare confusione.

    ps: l'odp è uno dei client cui mi riferivo
    pps: sql server per ritornare recordset ha semplicemente un metodo più veloce. se tu esegui una select nella sp il risultato ti viene ritornato come recordset di default. se tu istanzi un cursore e vuoi ritornare quello in quel caso dovresti dichiarare il parametro e recuperarlo.
    per oracle la cosa è un po' più complicata e la prima strada non è consentita

    xxx

  10. #10
    Utente di HTML.it L'avatar di dops
    Registrato dal
    Jul 2000
    Messaggi
    4,126
    Originariamente inviato da Alethesnake
    In input sono i parametri che devi passare alla procedura, in output quelli che la procedura ti ritorna.

    ok ma quindi la sp dovrebbe passarmi un parametro in input, invece lo dichiaro in output e mi funziona pure
    Voglio l'alt+s anche per FF

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.