2015-06-22 153 views
0

我想在VirtualBox上连接到我的SqlDatabase。我尝试不同的方式来做到这一点,但不幸的是,它不起作用。我添加了一个MySql.DataMySql.Data.MySqlClientc#使用MySQL连接到数据库

 MySqlConnection connection; 
     string server; 
     string database; 
     string uid; 
     string password; 
     string port; 
     server = "192.168.1.21"; 
     port = "3306"; 
     database = "terminal1"; 
     uid = "root"; 
     password = "pass"; 
     string connectionString; 
     connectionString = "SERVER=" + server + ";" + "PORT=" + port +   ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";" + "Pooling=false"; 
     connection = new MySqlConnection(connectionString); 


     try 
     { 
      connection.Open(); 
      label1.Text = "NET - OK"; 
     } 
     catch (MySqlException ex) 
     { 
      //0: Cannot connect to server. 
      //1042: Unable to connect to any of the specified MySQL hosts. 
      //1045: Invalid user name and/or password. 
      switch (ex.Number) 
      { 
       case 0: 
        MessageBox.Show("Cannot connect to server. Contact administrator"); 
        break; 
       case 1042: 
        MessageBox.Show("Unable to connect to any of the specified MySQL hosts"); 
        break; 
       case 1045: 
        MessageBox.Show("Invalid username/password, please try again"); 
        break; 
       default: 

         label1.Text = "NET - ERROR"; 

        break; 
      } 

     } 

任何人都可以帮忙吗?

编辑: 该程序显示错误1042:无法连接到任何指定的MySQL主机。

+0

不工作怎么样? 'mysql'服务器是否接受来自其他主机的连接而不是本地主机? – Jite

+0

在PHP我可以通过IP连接,所以我认为服务器接受来自其他主机的连接,而不是本地主机 – Wojtek

+0

请...不要使用标准点网络名称 –

回答

0

我有这个问题struggeld自己,这是我的sqlclass:

namespace Chat 
{ 
    internal class DBConnect 
    { 
     private MySqlConnection _connection = new MySqlConnection(); 
     private MySqlConnection _register = new MySqlConnection(); 
     private MySqlConnection _userdata = new MySqlConnection(); 
     private string _server; 
     private string _database; 
     private string _uid; 
     private string _password; 
     public String MessageRecieved; 
     //private string _table = "testconnectie"; 
     private string _port; 
     //private bool succes = false; 


     //Constructor 
     public DBConnect() 
     { 
      InitializeChat(); 
      InitializeRegister(); 
     } 

     //Initialize values 
     public void InitializeChat() 
     { 
      _server = "localhost"; 
      _port = "3307"; 
      _database = "test"; 
      _uid = "root"; 
      _password = "usbw"; 


      string connectionString = "Server=" + _server + ";" + "Port=" + _port +";" + "Database=" + 
           _database + ";" + "Uid=" + _uid + ";" + "Pwd=" + _password + ";"; 

      _connection = new MySqlConnection(connectionString); 
     } 

     public void InitializeUserData() 
     { 
      _server = "localhost"; 
      _port = "3307"; 
      _uid = "root"; 
      _password = "usbw"; 


      string connectionString = "Server=" + _server + ";" + "Port=" + _port + ";" + "Database=" + 
           _database + ";" + "Uid=" + _uid + ";" + "Pwd=" + _password + ";"; 

      _connection = new MySqlConnection(connectionString); 
     } 

     public void InitializeRegister() 
     { 
      _server = "localhost"; 
      _port = "3307"; 
      _database = "testlogin"; 
      _uid = "root"; 
      _password = "usbw"; 


      string registerString = "Server=" + _server + ";" + "Port=" + _port + ";" + "Database=" + 
           _database + ";" + "Uid=" + _uid + ";" + "Pwd=" + _password + ";"; 

      _register = new MySqlConnection(registerString); 
     } 

     public bool OpenConnection() 
     { 
      try 
      { 
       _register.Open(); 
       return true; 
      } 
      catch (MySqlException ex) 
      { 
       switch (ex.Number) 
       { 
        case 0: 
         MessageBox.Show("Cannot connect to server"); 
         break; 

        case 1042: 
         MessageBox.Show("Unable to connect to any of the specified MySQL hosts"); 
         break; 

        case 1045: 
         MessageBox.Show("Invalid username/password"); 
         break; 
       } 
       return false; 

      } 

     } 

     public void Select() 
     { 
      string selectquery = "SELECT * FROM testconnectie"; 

      MySqlCommand cmd = new MySqlCommand(selectquery, _connection); 

      MySqlDataReader dataReader = cmd.ExecuteReader(); 

      _messagelist.Clear(); 
      while (dataReader.Read()) 
      { 
       _messagelist.Add(dataReader["time"] + "  "); 
       _messagelist.Add(dataReader["text"] + "\r\n"); 
      } 

      dataReader.Close(); 


      MessageRecieved = _messagelist.ToString(); 

     } 

     public void Insert(string textvalue) 
     { 
      //DateTime dt = DateTime.Parse("6/22/2009 07:00:00 AM"); 

      //dt.ToString("H:mm"); // 7:00 // 24 hour clock 

      //var now = DateTime.Now; 
      //var minutes = now.Minute; 
      //var hour = now.Hour; 
      //var time = now; 

      string time = DateTime.Now.ToString("HH:mm:ss"); 

      string insertquery = "INSERT INTO testconnectie(time, text) VALUES ('"+time+"','"+textvalue+"')"; 

      try 
      { 
       MySqlCommand cmd = new MySqlCommand(insertquery, _connection); 

       cmd.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error(1)" + ex); 
      } 
     } 

     private void Update() 
     { 
      string updatequery = "UPDATE tabelnaam SET waarde='', waarde'' WHERE waarde=''"; 

      MySqlCommand cmd = new MySqlCommand(); 

      cmd.CommandText = updatequery; 
      cmd.Connection = _connection; 

      cmd.ExecuteNonQuery(); 
     } 

     private void Delete() 
     { 
      string deletequery = "DELETE FROM tabelnaam WHERE waarde=''"; 

      MySqlCommand cmd = new MySqlCommand(deletequery, _connection); 
      cmd.ExecuteNonQuery(); 
     } 

     public bool CloseConnection() 
     { 
      try 
      { 
       _connection.Close(); 
       return true; 
      } 
      catch (MySqlException ex) 
      { 
       MessageBox.Show(ex.Message); 
       return false; 

      } 

     } 


     public void Backup() 
     { 
      try 
      { 
       DateTime Time = DateTime.Now; 
       int year = Time.Year; 
       int month = Time.Month; 
       int day = Time.Day; 
       int hour = Time.Hour; 
       int minute = Time.Minute; 
       int second = Time.Second; 
       int millisecond = Time.Millisecond; 

       //Save file to C:\ with the current date as a filename 
       string path; 
       path = "C:\\ChatBackup" + year + "-" + month + "-" + day + 
      "-" + hour + "-" + minute + "-" + second + "-" + millisecond + ".sql"; 
       StreamWriter file = new StreamWriter(path); 


       ProcessStartInfo psi = new ProcessStartInfo(); 
       psi.FileName = "Database Backup"; 
       psi.RedirectStandardInput = false; 
       psi.RedirectStandardOutput = true; 
       psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}", 
      _uid, _password, _server, _database); 
       psi.UseShellExecute = false; 

       Process process = Process.Start(psi); 

       string output; 
       output = process.StandardOutput.ReadToEnd(); 
       file.WriteLine(output); 
       process.WaitForExit(); 
       file.Close(); 
       process.Close(); 
      } 
      catch (IOException ex) 
      { 
       MessageBox.Show("Error , unable to backup! " + ex); 
      } 
     } 



    } 

} 

希望这有助于它可能是有点大,但只是使用功能,你需要

你可以做的是使用在项目属性中设置存储所有连接数据。

所以你可以把serverIp,Port,Database,Uid和密码放在de设置标签中。

你可以打电话给他们这样的:Properties.Settings.Default.serverIp

它的轻松一点所以最后你可以这样做:

string serverIp = Properties.Setting.Default.serverIp; 
string port = Properties.Setting.Default.port; 
string username = Properties.Setting.Default.Uid; 

等。

也可能试图改变UID在你的ConnectionString TYO Uid

你也捕捉到了异常,但你不使用它,在这种情况下,默认应显示为exception,所以你可以把它理解。你可以这样做:

label1.Text = "Error: " + ex.Message; 
0

你必须使用DBLinq将mysql集成到C#中。

请访问DBLinq

+0

你为什么要使用它?我的意思是Mysql.Data工作很好 –