Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908

    [C#] UPDATE con parametri

    Ho questo codice:

    codice:
    protected void Page_Load(object sender, EventArgs e)
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "localhost\\SQLExpress";
                builder.InitialCatalog = "Miatabella";
                builder.IntegratedSecurity = true;
    
    
                SqlParameter pIdReg = new SqlParameter();
                pIdReg.ParameterName = "@IdReg";
                pIdReg.DbType = DbType.String;
                pIdReg.Direction = ParameterDirection.Input;
                pIdReg.Value = Request.QueryString["idReg"];
    
    
                SqlParameter pAuthCode = new SqlParameter();
                pAuthCode.ParameterName = "@AuthCode";
                pAuthCode.DbType = DbType.String;
                pIdReg.Direction = ParameterDirection.Input;
                pAuthCode.Value = Request.QueryString["AuthCode"];
    
    
                using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
                {
                    try
                    {
                        conn.Open();
                    }
    
    
                    catch(Exception errore)
                    {
                        Response.Write(errore.ToString());
                    }
    
    
                    using (SqlCommand cmd = new SqlCommand("UPDATE Tabella_Account SET Status='0' WHERE AuthCode=@AuthCode AND IdReg=@IdReg", conn))
                    {
                        cmd.Parameters.Add(pIdReg);
                        cmd.Parameters.Add(pAuthCode);
                        int risultato = cmd.ExecuteNonQuery();
                        Response.Write("Account attivato correttamente " + risultato.ToString());
                    }
    
    
                
              }
               
    
    
            }
    Quando vado ad eseguirla mi va in errore alla riga:

    codice:
    int risultato = cmd.ExecuteNonQuery();
    Errore: La query con parametri '(@IdReg nvarchar(4000),@AuthCode nvarchar(4000))UPDATE Tabella_' prevede il parametro @IdReg, che non è stato specificato. Comemai non vede i parametri? Cosa sbaglio?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

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

    cmd.Parameters.AddWithValue("@AuthCode", pAuthCode);
    cmd.Parameters.AddWithValue("@IdReg", pIdReg);


    (e metti una Try anche per ExecuteNonQuery)
    Ultima modifica di djciko; 03-02-2015 a 12:35

  3. #3
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Quote Originariamente inviata da djciko Visualizza il messaggio
    prova

    cmd.Parameters.AddWithValue("@AuthCode", pAuthCode);
    cmd.Parameters.AddWithValue("@IdReg", pIdReg);


    (e metti una Try anche per ExecuteNonQuery)

    System.ArgumentException: Nessun mapping esistente dal tipo di oggetto System.Data.SqlClient.SqlParameter a un tipo nativo di provider gestito noto

    Ecco il codice:
    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    
    
    namespace Bridge.users
    {
        public partial class Bridge : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "localhost\\SQLExpress";
                builder.InitialCatalog = "Miatabella";
                builder.IntegratedSecurity = true;
    
    
                SqlParameter pIdReg = new SqlParameter();
                pIdReg.ParameterName = "@IdReg";
                pIdReg.DbType = DbType.String;
                pIdReg.Direction = ParameterDirection.Input;
                pIdReg.Value = Request.QueryString["idReg"];
    
    
                SqlParameter pAuthCode = new SqlParameter();
                pAuthCode.ParameterName = "@AuthCode";
                pAuthCode.DbType = DbType.String;
                pIdReg.Direction = ParameterDirection.Input;
                pAuthCode.Value = Request.QueryString["AuthCode"];
    
    
                using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
                {
                    try
                    {
                        conn.Open();
                    }
    
    
                    catch(Exception errore)
                    {
                        Response.Write(errore.ToString());
                    }
    
    
                    using (SqlCommand cmd = new SqlCommand("UPDATE Tabella_Account SET Status='0' WHERE AuthCode= @AuthCode AND IdReg= @IdReg", conn))
                    {
                        cmd.Parameters.AddWithValue("@AuthCode", pAuthCode);
                        cmd.Parameters.AddWithValue("@IdReg", pIdReg);
                        try
                        {
                            int risultato = cmd.ExecuteNonQuery();
                            Response.Write("Utente correttamente attivato: " + risultato.ToString());
                        }
    
    
                        catch(Exception queryError)
                        {
                            Response.Write(queryError.ToString());
                        }
                       
                    }
    
    
                
              }
               
    
    
            }
        }
    }
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    initialcatalog è il DATABASE comunque, non la tabella

  5. #5
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Quote Originariamente inviata da djciko Visualizza il messaggio
    initialcatalog è il DATABASE comunque, non la tabella
    Lo so... ho modificato il nome solo per una questione di privacy. In riferimento all'errore? Mi sai dare una mano?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    uhm...complesso. ora non posso provare.
    controlla:

    pIdReg.SqlDbType = SqlDbType.VarChar;

    e la direzione credo sia superflua
    Ultima modifica di djciko; 03-02-2015 a 17:19

  7. #7
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Non è che i valori che passi sono a nothing?

  8. #8
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    @URANIO
    No... ho provato a mettere i due valori passati via querystring in altrettante variabili, per poi stamparne a video i valori, e i dati ci sono.

    P.S. Ho modificato la query passando un solo parametro e così va, mentre se piazzo il secondo parametro nulla!

    Ecco la mia attuale query:

    codice:
    using (SqlCommand cmd = new SqlCommand("UPDATE FANTAWIT_Account SET Status=@StatusAct WHERE IdReg=@IdReg", conn))
    Se utilizzo un solo parametro nella clausola WHERE(indipendentemente quali dei due, funziona comunque), la query porta a compimento l'operazione, se ne aggiungo un'altra, no! Sto impazzendo... cosa potrebbe mai essere?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  9. #9
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Quote Originariamente inviata da djciko Visualizza il messaggio
    uhm...complesso. ora non posso provare.
    controlla:

    pIdReg.SqlDbType = SqlDbType.VarChar;

    e la direzione credo sia superflua
    Nulla... ecco come ho modificato il codice:

    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.Data.Sql;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    
    
    namespace FantaWrestling.users
    {
        public partial class FantaWitBridge : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
                builder.DataSource = "localhost\\SQLExpress";
                builder.InitialCatalog = "MIODATABASE";
                builder.IntegratedSecurity = true;
    
    
                SqlParameter pIdReg = new SqlParameter();
                pIdReg.ParameterName = "@IdReg";
                pIdReg.DbType = DbType.String;
                pIdReg.SqlDbType = SqlDbType.VarChar;
                pIdReg.Value = Request.QueryString["idReg"];
    
    
                SqlParameter pAuthCode = new SqlParameter();
                pAuthCode.ParameterName = "@AuthCode";
                pAuthCode.DbType = DbType.String;
                pAuthCode.SqlDbType = SqlDbType.VarChar;
                pAuthCode.Value = Request.QueryString["AuthCode"];
    
    
                SqlParameter pStatusAct = new SqlParameter();
                pStatusAct.ParameterName = "@StatusAct";
                pStatusAct.Value = "1";
    
    
                
    
    
                using (SqlConnection conn = new SqlConnection(builder.ConnectionString))
                {
                    try
                    {
                        conn.Open();
                    }
    
    
                    catch(Exception errore)
                    {
                        Response.Write(errore.ToString());
                    }
    
    
                    using (SqlCommand cmd = new SqlCommand("UPDATE MIATABELLA_Account SET Status=@StatusAct WHERE IdReg=@IdReg AND AuthCode=@AuthCode", conn))
                    {
                        cmd.Parameters.Add(pAuthCode);
                        cmd.Parameters.Add(pIdReg);
                        cmd.Parameters.Add(pStatusAct);
                        try
                        {
                            int risultato = cmd.ExecuteNonQuery();
                            Response.Write("Utente correttamente attivato: " + risultato.ToString());
                        }
    
    
                        catch(Exception queryError)
                        {
                            Response.Write(queryError.ToString());
                        }
                       
                    }
    
    
                
              }
               
    
    
            }
        }
    }
    La query non mi restituisce errori, ma non aggiorna.
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  10. #10
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Mi sa che ho individuato il problema. Praticamente, nel secondo parametro passato, quando viene generato l'url c'è una "/" di troppo, e quindi, ovviamente, l'operatore AND va a farsi benedire, visto che solo una delle due condizioni è vera!
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

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.