Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    75

    [C#]dati incompatibili su sql server

    ciao a tutti
    ho un problema: quando cerca di interrogare un database fatto in sql server con la seguente query:
    "SELECT * FROM libro WHERE codice='pippo'
    visual studio se ne esce con il seguente errore:
    "I tipi di dati text e varchar nell'operatore equal to sono incompatibili."

    posto anche il pezzo di codice completo:
    codice:
    string par;
                SqlCommand cmd; SqlDataReader dr;
                Console.Clear();
                Console .Write("\n     Inserisci il codice del libro da cercare:");
                par = Console.ReadLine();
                cmd = new SqlCommand("SELECT * FROM libro WHERE codice='pippo'", conn.connDB);
                dr = cmd.ExecuteReader();
                Console.Clear();
                //altre istruzioni....
    qualcuno sa come ovviare a questo problema?
    grazie ciao

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Ho spostato la discussione all'interno del forum dedicato a Visual Basic (VBx, VBA, ...) e ai linguaggi per .NET Framework (VB.NET, C#, ...).

    In futuro, poni in questo forum le domande relative a questi linguaggi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Per il tuo problema, leggi e approfondisci l'uso dei parametri, con la classe SqlParameter.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    75
    innanzitutto scusa per aver sbagliato a postare evidentemente ero soprapensiero
    cmq l'esistenza dei parametri la sapevo già ma pensavo servissero solo per evitare problemi quali la sql-injection o simili. Cmq sono andato a rivedermeli e ho aggioranto il codice, ma mi restituisce sempre lo stesso errore
    ecco il nuovo codice:
    codice:
     public void verifica(string numero)
            {
                cmd = new SqlCommand("SELECT * FROM persona WHERE n_tessera = @tes", conn.connDB);
                SqlParameter prm = new SqlParameter();
                prm.DbType = DbType.String;
                prm.ParameterName = "@tes";
                prm.Value = numero; 
                cmd.Parameters.Add(prm);
               dr = cmd.ExecuteReader() ;
            }
    ho anche provato a fare così ma non cambia niente:
    [CODE]
    cmd = new SqlCommand("SELECT * FROM persona WHERE n_tessera = @tes", conn.connDB);
    cmd.Parameters.AddWithValue("@tes", numero);
    dr = cmd.ExecuteReader() ;
    [\CODE]

    qualcuno sa dove sbaglio ?
    grazie ciao
    luca

  5. #5
    Ciao, io strutturerei la procedura in questo modo:

    codice:
    DataTable risultato = new DataTable();
    SqlDataAdapter dataAdap = new SqlDataAdapter("SELECT * FROM persona WHERE n_tessera = " + Numero, conn.connDB);
                
                if (dataAdap .SelectCommand.Connection.State == ConnectionState.Closed)
                    dataAdap .SelectCommand.Connection.Open();
    
                try
                {
                    dataAdap .Fill(risultato);
                    return risultato;
                }
                catch (SqlException e)
                {
                   //qui gestisci l'eccezione
                }
    In pratica gli passo il parametro su cui fare la ricerca "il numero" direttamente direttamente nella select, altrimenti dovresti crearti una stored procedre nel db, poi richiamare la stored procedure passadogli un parametro.
    In sostanza se utilizzi una parametro come il "@tes" che richiami tu, da qualche parte nell'sql glielo devi dichiarare (usando ad esempio un: "@tes int") altrimenti lui non sa che tipo ha quel parametro.
    Comunque nel codice che ti scritto ho bypassato l'uso di parametri sql.

    Prova un pò così....

    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.