如何将Web服务连接到MySql数据库?

问题描述:

我使用Visual Studio在C#中创建了一个Web服务,该服务连接到我的PC上的MySql数据库。在调试模式下,它工作的很好,我可以使用Web方法并执行查询。 但是,由于我在主机上发布了我的Web服务,Web服务不再工作。 下面是代码,以防万一:如何将Web服务连接到MySql数据库?

DbConnect.cs:

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; 
    } 
    } 

} 

Service1.asmx.cs:

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; 
    } 
} 
} 

请,任何人都可以帮我解决这个问题呢? 在此先感谢。

server = "localhost"; 需要设置为真正的服务器位置,如果您在其他地方托管过该服务器位置,则不再需要本地主机。

+0

我试过也使用我的公共IP,但它没有工作 – 2013-04-26 15:56:30

+0

是否有端口问题?无论是防火墙还是端口转发 – 2013-04-26 16:03:33

+0

我转发了我的路由器上的端口3306,并已在防火墙上解除阻止mysql.exe – 2013-04-26 16:12:15

我有类似的问题。然后我想起连接器(MySql * .dll)未被复制到服务器中的bin文件夹中。 > :-p

注意:对不起,我没有注意到发布日期,但好吧...也许有人会发现这个答案有用(记得将连接器复制到服务器,乡亲们)。