我不太明白MySql连接的样子

时间:2012-12-08 15:19:02

标签: c# mysql windows forms

今天我一直坐在我的电脑旁边试着如何连接和使用MySql数据库。我有很多问题,但我会尽量保持一些。

  1. 当我使用语句sqlConnection.Open();初始化与服务器的连接时 此连接现在是否已打开并准备好使用,直到我告诉服务器否则?

  2. Close()语句似乎没有关闭连接,如果我观察我的服务器状态,我可以看到我发送后连接仍然存在。

  3. 假设我想从我的数据库中检索数据,我首先执行我的功能setupConnection(); 此fuuction发送Open()然后返回true或false。然后我可能会有一个函数来检索显示和计算等数据。当我调用此函数时,我是否需要再次打开连接?

  4. 总结一下,只有当程序与Open();函数处于同一范围时,才会打开连接?

    而且我还能做些什么来不必在每个函数中声明这个:

    MySqlConnection sqlConnection; sqlConnection = new MySqlConnection();

    以下是我今天一直在做的一些代码:

        /// <summary>
        /// InitConnection outputs the connectionstring
        /// </summary>
        /// <param name="Adress">Server adress</param>
        /// <param name="Port">Server port</param>
        /// <param name="Uid">Username</param>
        /// <param name="Pwd">Password</param>
        /// <param name="Database">Database</param>
        /// <returns>the connectionstring</returns>
        public string initConnection(string Adress, string Port, 
             string Uid, string Pwd, string Database)
        {
            return "server=" + Adress + ";port=" + Port + ";uid=" + Uid + ";" +
                "pwd=" + Pwd + ";database=" + Database + ";";
        }
    
        /// <summary>
        /// setuupConnection will setup an active connection to the database 
        /// specified in initConnection
        /// </summary>
        /// <param name="ConnectionString">The return value of 
        /// initConnection</param>
        /// <returns>True or False</returns>
        public bool setupConnection(string ConnectionString)
        {
            MySqlConnection sqlConnection;
            sqlConnection = new MySqlConnection();
            sqlConnection.ConnectionString = ConnectionString;            
            try
            {
                sqlConnection.Open();
            return true;
            }
            catch (MySqlException ex)
            {
                switch (ex.Number)
                { 
                    case 0:
                        MessageBox.Show("Cannot connect to server.");
                        break;
                    case 1045:
                        MessageBox.Show("Invalide username/password.");
                        break;
                }
            return false;
            } 
        }
    
        /// <summary>
        /// closeConnection will terminate the database connection.
        /// </summary>
        /// <returns>True or False</returns>
        public bool closeConnection()
        {
            MySqlConnection sqlConnection;
            sqlConnection = new MySqlConnection();
            try
            {
                sqlConnection.Dispose();
            return true;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
            return false;
            }  
        }
    

4 个答案:

答案 0 :(得分:2)

您正在设置和关闭功能范围内设置连接。您设置连接,打开它,然后您的功能结束,连接超出范围。在你的关闭函数中,你正在定义一个仅用于处理它的连接,这没有任何意义。设置您的连接,打开它,使用它,然后关闭它。

看起来你应该学习并理解变量范围。

答案 1 :(得分:1)

您可以使用http://connectionstring.com非常有用的网站:

http://www.connectionstrings.com/mysql

  

标准

     

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

     

指定TCP端口

 Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
     

端口3306是默认的MySql端口。如果是Unix,则忽略该值   使用套接字。

     

多个服务器使用此服务器连接到已复制的服务器   服务器配置,而不关心使用哪个服务器。

 Server=serverAddress1, serverAddress2, serverAddress3;Database=myDataBase; Uid=myUsername;Pwd=myPassword;
     

使用加密(旧)这个激活所有数据的SSL加密   在客户端和服务器之间发送。服务器必须具有证书   安装。

  Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;Encrypt=true;
     

此选项适用于Connector / NET版本5.0.3到   6.2.1。从6.2.1开始使用SslMode选项。

     

使用加密(新)如果服务器支持SSL,则使用SSL,但允许   在所有情况下连接

  Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
     

SslMode =优选的;此选项可从Connector / NET版本获得   6.2.1

     

强制加密始终使用SSL。如果服务器没有拒绝连接   支持SSL。

  Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
     

SslMode =必需的;此选项可从Connector / NET版本获得   6.2.1

答案 2 :(得分:1)

我完全不明白这个问题。你试图连接MySQL,你设法做到了;但后来停了下来。为什么呢?

实际上,一切都很简单,互联网上有很多例子。

您想从MySQL表中检索数据吗?一种变体是使用IDataReader:

  • 创建MySqlCommand
  • 运行ExecureReader方法
  • 获取IDataReader实例
  • 逐个阅读记录。

祝你好运!

答案 3 :(得分:1)

  1. 是的,如果您调用Open()并且没有异常,那么您就可以使用了。您应该使用命令对象生成SQL并将其发送到服务器。

  2. 在“closeconnection”方法中,您只需创建一个新的连接对象,然后就可以将其处理掉。你甚至没有打开那个连接。

  3. 您需要在类中声明连接对象,而不是在方法中。这样做只允许您使用一个连接对象并允许您的代码运行。您当前的代码无法正常工作,因为您在每种方法中使用不同的连接对象。

  4. 但是,数据库连接很昂贵,如果你不经常使用连接,那么你应该打开连接 - 用数据库做你的工作 - 关闭它。在开始时打开数据库连接并保持连接打开直到应用程序结束不是一个好习惯。

    我认为,正如@PhoenixReborn所说,你应该研究变量范围。