Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-04-2013, 14:53   #1
seriud89
Junior Member
 
Iscritto dal: Jun 2012
Messaggi: 16
[C# - MYSQL] Usare Database da webservice

Ciao a tutti. Come da titolo, il mio problema riguarda l'utilizzo di un Database (scritto in SQL e memorizzato utilizzando MySql) da un webservice che ho creato io.
Durante la fase di debug, in locale, tutto funziona perfettamente (ho dotato il web service di un metodo di inserimento dati e un metodo che effettua una query), ma una volta che ho pubblicato il web service su un sito, i metodi non funzionano più.. Come posso fare?
Di seguito vi posto il codice, nel caso possa essere utile per meglio intendere il problema:

Service1.asmx.cs:
Codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using MySql.Data.MySqlClient;

namespace WebService1
{
    /// <summary>
    /// Descrizione di riepilogo per Service1
    /// </summary>
    [WebService(Namespace = "http://ocrwebservice.somee.com/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Per consentire la chiamata di questo servizio Web dallo script utilizzando ASP.NET AJAX, rimuovere il commento dalla riga seguente. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string InsertIntoDB(string latitudine, string longitudine, string testo)
        {
            DBConnect dbObject = new DBConnect();
            string result;

            result = dbObject.Insert(latitudine, longitudine, testo);
            return result;
        }

        [WebMethod]
        public string Testing(string latitudine, string longitudine, string testo)
        {
            DBConnect dbObject = new DBConnect();
            string result;

            result = dbObject.Test(latitudine, longitudine, testo);
            return result;
        }
    }
}
DbConnect.cs :
Codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;

namespace WebService1
{
    public class DBConnect
    {
        private MySqlConnection connection;
        private string server;
        private string database;
        private string uid;
        private string password;

        //Costruttore
        public DBConnect()
        {
            Initialize();
        }

        //Inizializzazione dei valori
        private void Initialize()
        {
            string connectionString;
            server = "localhost";
            database = "cartellodb";
            uid = "OCRUser";
            password = "admin";

            connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" +
                                "UID="  + uid + ";" + "PASSWORD=" + password + ";";

            connection = new MySqlConnection(connectionString);
        }

        private bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }catch (MySqlException e) {
                switch (e.Number) { 
                    case 0:
                        Console.WriteLine("Impossibile connettersi al server");
                        break;
                    case 1045:
                        Console.WriteLine("Password/username non validi. Riprovare");
                        break;
                }
                return false;
            }
        }


        private bool CloseConnection()
        {
            try
            {
                connection.Close();
                return true;
            }catch (MySqlException e){
                Console.WriteLine(e.Message);
                return false;
            }
        }

        public string Insert(string lat, string lon, string text)
        {
            string query = "INSERT INTO Cartello VALUES (" + lat + "," + lon + ",'" + text + "');";

            //apertura connessione
            if (this.OpenConnection() == true)
            {
                //creazione ed istanziazione comando ed assegnazione della query e della connessione al comando
                MySqlCommand cmd = new MySqlCommand(query, connection);
      
                //esecuzione query
                cmd.ExecuteNonQuery();                     
            }
            this.CloseConnection();

            return "Inserimento dati completato con successo";
        }

        public string Test(string lat, string lon, string text)
        {
          string query = "SELECT * FROM Cartello WHERE latitude = " + lat + " AND longitude = " + lon + " AND testo = '" + text + "';";
          string result = "", queryResult = "";

          //apertura connessione 
          if(this.OpenConnection() == true)
          {
              //creazione ed istanziazione comando ed assegnazione della query e della connessione al comando
              MySqlCommand cmd = new MySqlCommand(query, connection);

              //creazione ed istanziazione del Data Reader che conterrà il risultato della query alla tabella
              MySqlDataReader dataReader = cmd.ExecuteReader();

              while(dataReader.Read())
                  queryResult = dataReader.GetString(0);

              if(queryResult.CompareTo("") == 0)
                  result = "NOTEXISTS";
              else
                  result = "EXISTS";
          
              dataReader.Close();
              this.CloseConnection();
          }


          return result;
        }
        }

    }
Grazie mille a tutti

Dimenticavo: ho già installato un connector .NET/MySql, precisamente la versione 6.6.4

Ultima modifica di seriud89 : 23-04-2013 alle 15:08. Motivo: edit
seriud89 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2013, 15:35   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Per aiutarti servirebbe per lo meno sapere l'errore che ottieni non ti pare?
Sicuro che la connessione al db sia giusta? Ad esempio anche dove pubblichi il db è sulla stessa macchina del webservice?
Perchè non utilizzi il web.config per la stringa di connessione, invece che cablarla nel codice?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2013, 15:42   #3
seriud89
Junior Member
 
Iscritto dal: Jun 2012
Messaggi: 16
Errori non ne ottengo. Nel metodo di testing dovrei ottenere in output una stringa "EXISTS" oppure "NOTEXISTS", ma tutto ciò che ottengo è una stringa vuota. Nel metodo di inserimento di una nuova riga al db, lo stesso, non ottego errori, ma non viene inserito nessun elemento.

La connessione dovrebbe essere giusta, altrimenti neanche in modalità debug in locale avrebbe funzionato. Il web service si trova pubblicato su un servizio di hosting, mentre il db si trova sulla mia macchina.

Ho scritto la connessione al db tramite il codice perchè ho trovato solo tutorial che mi spiegavano di procedere in questo modo.

Grazie
seriud89 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2013, 16:21   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da seriud89 Guarda i messaggi
Errori non ne ottengo. Nel metodo di testing dovrei ottenere in output una stringa "EXISTS" oppure "NOTEXISTS", ma tutto ciò che ottengo è una stringa vuota. Nel metodo di inserimento di una nuova riga al db, lo stesso, non ottego errori, ma non viene inserito nessun elemento.

La connessione dovrebbe essere giusta, altrimenti neanche in modalità debug in locale avrebbe funzionato. Il web service si trova pubblicato su un servizio di hosting, mentre il db si trova sulla mia macchina.

Ho scritto la connessione al db tramite il codice perchè ho trovato solo tutorial che mi spiegavano di procedere in questo modo.

Grazie
Vedo un bel po' di problemi: il tuo codice utilizza come server db "localhost" quindi già di partenza una volta pubblicato non può funzionare.
Poi ci vedo problemi di firewall devi aprire la porta 3306 sul tuo modem/router locale.
Non vedi quello che ti aspetti perchè OpenConnection() ritorna sicuramente sempre false quindi salta completamente il tuo codice.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2013, 16:34   #5
seriud89
Junior Member
 
Iscritto dal: Jun 2012
Messaggi: 16
Al posto di "localhost" cosa dovrei inserire per fare in modo che funzioni?
Ti ringrazio molto per il tuo aiuto
seriud89 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2013, 17:12   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da seriud89 Guarda i messaggi
Al posto di "localhost" cosa dovrei inserire per fare in modo che funzioni?
Ti ringrazio molto per il tuo aiuto
Almeno il tuo ip pubblico
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2013, 09:30   #7
seriud89
Junior Member
 
Iscritto dal: Jun 2012
Messaggi: 16
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Almeno il tuo ip pubblico
Ho provato anche con il mio ip pubblico, ma non è cambiato niente..
seriud89 è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2013, 11:24   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da seriud89 Guarda i messaggi
Ho provato anche con il mio ip pubblico, ma non è cambiato niente..
Metti un log su file invece che su console (che non serve a niente su un ws) e utilizza meglio le eccezioni: gestire il catch per fare un return false non è il massimo
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2013, 10:48   #9
rizamp
Member
 
Iscritto dal: Mar 2009
Messaggi: 257
ma perchè non metti la connessione al db nel web.config? esiste un sito: http://connectionstrings.com/ che genera le stringhe di connessione a qualsiasi database.

dopo di che metti la riga nella sezione ad esempio

<connectionStrings>
<add name="connessione_db" connectionString="Data Source=mio-indirizzo-database;Initial Catalog=nome_db;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
rizamp è offline   Rispondi citando il messaggio o parte di esso
Old 03-05-2013, 10:52   #10
rizamp
Member
 
Iscritto dal: Mar 2009
Messaggi: 257
e se commenti ad esempio nella insert la if

if (this.OpenConnection() == true)

forzi il metodo alla scrittura, così vedi l'errore (ma nel web.config devi avere customerrors=Off).

altrimenti non c'è connessione e le istruzioni di insert vengono ignorate... non vedrai mai qual è il problema.
rizamp è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Grazie a GLIMPSE-17775 il telescopio spa...
Samsung Galaxy A27 5G è ufficiale...
TCL aggiorna la sua gamma di monitor per...
Anche OPPO avrà uno smartphone co...
La Radeon RX 9070 XT appare su Steam e m...
L'America si ribella ai datacenter: bloc...
'Artificial General Engineer': l'IA di J...
Il drone NASA Dragonfly, che voler&agrav...
Stop immediato a Fable 5 e Mythos 5: il ...
"Prime Day Amazon il 23-26 giugno": sì e...
Oggi 2 super MacBook Pro M5 e M5 Pro, 24...
Tineco Floor One Station S9 Artist: il s...
Raggiunte nuove altitudine e velocit&agr...
Apple Watch Series 11 GPS a 339€ su Amaz...
Come un MacBook, ma con la RTX 5070: MSI...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v