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

    Problema con web service

    Salve, sto creando un piccolo web Method in asp.net ma purtroppo non sono molto pratico di .net, quando posso scegliere programmo in php quindi chiedo gentilmente un aiuto , non riesco a stampare a video nel web method il risultato di una stored procedures, inserisco qui di seguito il codice che ho utilizzato :

    codice:
     [WebMethod]
        public string RegUsuario(string salutation, string firstname, string lastname, string lastname2, int companyid, int departamentoid, int cargoid, string cargodescripcion, string emailaddress, string phonenumber, string country, string state,string usuarioweb,string pwdweb,string razonsocial)
        {
          
            using (SqlConnection conn = new SqlConnection(datosConexion))
            
            {
                conn.Open();
    
    
                SqlCommand command = new SqlCommand("sp_orb_web_personAdd", conn);
                command.CommandType = CommandType.StoredProcedure;
                command.Parameters.AddWithValue("salutation", salutation);
                command.Parameters.AddWithValue("firstname", firstname);
                command.Parameters.AddWithValue("lastname", lastname);
                command.Parameters.AddWithValue("lastname2", lastname2);
                command.Parameters.AddWithValue("companyId", companyid);
                command.Parameters.AddWithValue("departamentoid", departamentoid);
                command.Parameters.AddWithValue("cargoid", cargoid);
                command.Parameters.AddWithValue("cargoDescripcion", cargodescripcion);
                command.Parameters.AddWithValue("emailAddress", emailaddress);
                command.Parameters.AddWithValue("phoneNumber", phonenumber);
                command.Parameters.AddWithValue("country", country);
                command.Parameters.AddWithValue("state", state);
                command.Parameters.AddWithValue("usuarioWeb", usuarioweb);
                command.Parameters.AddWithValue("pwdWeb", pwdweb);
                command.Parameters.AddWithValue("razonSocial", razonsocial);
    
    
                output = command.ExecuteNonQuery().ToString();
                //output = command.ExecuteScalar().ToString();
                /*  IDataReader dr;
                dr = command.ExecuteReader();
    
    
                //List each product.
                while (dr.Read())
                {
                    output = dr.GetString(0);
                }
                //Clean up.
                dr.Close(); */
    
    
           
                //output= command.ExecuteScalar().ToString();
            }
    
    
    
    
            return output;
    La stored procedures dovrebbe restituire un numero che puó essere 0, -1,-2,-3,-4 ed ogni numero corrisponde una cosa differente, il problema è che il web service restituisce -1 fisso in qualsiasi situazione.
    Suggerimenti?

  2. #2
    Problema risolto, spiego un po la soluzione: ho dovuto passare la chiamata alla stored procedure mettendo il risultato in una variabile e stampando il risultato a video, poi ho visualizzato il risultato andandolo a prendere con il comando tramite la connessione, conn.InfoMessage e stampandolo a video, questo è il codice utilizzato :
    codice:
    using (SqlConnection conn = new SqlConnection(datosConexion))
            
            {
                conn.Open();
               
                SqlCommand command = new SqlCommand("declare @pr int exec @pr = Sp_Orb_Web_PersonAdd '" + salutation + "','" + firstname + "','" + lastname + "','" + lastname2 + "'," + companyid + "," + departamentoid + "," + cargoid + ",'" + cargodescripcion + "','" + emailaddress + "','" + phonenumber + "','" + country + "','" + state + "','" + usuarioweb + "','" + pwdweb + "','" + razonsocial + "' print @pr", conn);
               
    
    
                conn.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
                {
                    output += "\n" + e.Message;
                };
    
    
      
                command.ExecuteNonQuery().ToString();
    
    
            }
            valor = Int32.Parse(output);

  3. #3
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Uhm, hai seguito una strada strana: il metodo ExecuteNonQuery basta a restituirti un int:

    public override int ExecuteNonQuery()



    Cioe' quando effettui una INSERT, DELETE o una UPDATE (ExecuteNonQuery NON è per le SELECT, come recita il nome stesso), torna il numero di righe 'affected' cioe' coinvolte nell'operazione.


    Di che tipo è la variabile "output" ?
    Ultima modifica di djciko; 10-09-2015 a 11:54

  4. #4
    Ti, spiego, non so se c'è una strada piú veloce, allora la stored prcedure fá una insert ed a me serviva che mi restituisse una variabile giá presente nella stored ma non un parametro, bada bene, non potevo aggiungere parametri perchè la stessa stored procedures viene utilizzata da altri processi quindi non potevo toccare i parametri, detto questo, con il primo metodo che ho postato mi veniva restituito solo o 0 o -1 invece io avevo bisogno della famosa variabile, per questo ho dovuto stamparla come un message e poi ho preso il valore, esiste un metodo piú semplice?

    Ah la variabile output è string, per questo alla fine la converto in integer e la assegno a "valor"

    Il prblema del ExecuteNonQuery è che restituisce -1 se va male oppure il numero delle righe inserite, ed a me servivano piú valori che non centravano nulla con il numero delle righe inserite.

    Grazie
    Ultima modifica di djciko; 10-09-2015 a 11:55

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Un esempio di cancellazione (DELETE) in cui si cancella un record per ID (quindi sicuramente è uno, da cui la If) :

    codice:
    private void Cancella_Riga(string ImageId)
        {
            string SQL ="DELETE FROM dbo.TB_Imagini where ID=" + ImageId;
    
            using(SqlConnection dbConnection =new SqlConnection(Stringa Di Connessione))
            {
                try
                {
                    dbConnection.Open();
                    SqlCommand command =new SqlCommand(SQL, dbConnection);
                    command.CommandType=CommandType.Text;
                     
                    command.ExecuteNonQuery();
    
                    int rowsAffected = command.ExecuteNonQuery();
                    if(rowsAffected ==1)
                    {
                        // fai qualcosa che indichi che l'operazione è andata a buon fine
                    }
    
                }
                catch(Exception ex)
                {
                    Response.Write("Errore: " + ex.message);
                }
            }
        }
    
    Ultima modifica di djciko; 10-09-2015 a 11:50

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Quote Originariamente inviata da crmwebs Visualizza il messaggio
    Ti, spiego, non so se c'è una strada piú veloce, allora la stored prcedure fá una insert ed a me serviva che mi restituisse una variabile giá presente nella stored ma non un parametro, bada bene, non potevo aggiungere parametri perchè la stessa stored procedures viene utilizzata da altri processi quindi non potevo toccare i parametri, detto questo, con il primo metodo che ho postato mi veniva restituito solo o 0 o -1 invece io avevo bisogno della famosa variabile, per questo ho dovuto stamparla come un message e poi ho preso il valore, esiste un metodo piú semplice?

    Ah la variabile output è string, per questo alla fine la converto in integer e la assegno a "valor"
    cioe' tu vuoi recuperare un valore che la stored usa per cose sue e non il risultato della INSERT ?

  7. #7
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    E comunque, non puoi fare una copia della stored ed usare quella, modificandola ?

    comunque credo che basti un parametro di output se ho ben capito il problema:

    http://stackoverflow.com/questions/1...ers-in-c-sharp
    Ultima modifica di djciko; 09-09-2015 a 15:22

  8. #8
    Si , esattamente! dovevo prendere una variabile che giá era presente nella stored , mi serviva per verificare se i dati passati alla stored sono corretti ed il motivo del perchè non è stata effettuata la Insert, esempio : se mi restituisce -3 io giá so che non ha inserito il record perchè per esempio il codice della compagnia che ho passato non esiste nella base dato, ecc

  9. #9
    Beh effettivamente si, potevo utilizzare una copia, è vero!! passavo un parametro in piú ed avevo risolto due ore prima!! buono bene a sapersi!! mi sono andato a complicare un po la vita !! grazie!

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Beh io farei un parametro di output (come da esempio sopra, in cui semplicemente prende l'ID del record inserito) chiamandolo @ESITO, con il numeretto che se e' minore di zero, indica che c'e' stato qualche problema, e magari un altro parametro di output di tipo Varchar(255) con il testo del messaggio di errore, se c'e', anche se credo che "ex.message" di ADO.Net rifletta quella stessa descrizione del provider.

    Comunque non ho ben capito perche' hai una sola variabile per due problematiche diverse, quando hai tempo posta la stored procedure. Ciao !

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.