3

今天我一直坐在我的电脑前,尝试如何连接和使用 MySql 数据库。我有很多问题,但我会尽量保留几个。

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

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

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

稍微总结一下,是不是程序和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

4 回答 4

2

您正在设置和关闭功能范围内设置连接。您设置连接,打开它,然后您的功能结束并且连接超出范围。在您的关闭函数中,您定义一个连接只是为了处理它,这是没有意义的。设置您的连接,打开它,使用它,然后关闭它。

看来您应该学习和理解变量范围。

于 2012-12-08T15:29:39.247 回答
1

我不完全理解这个问题。您尝试连接到 MySQL,并且您设法做到了;但随后停了下来。为什么?

其实一切都很简单,网上有很多很多的例子。

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

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

祝你好运!

于 2012-12-08T20:23:59.777 回答
1
  1. 是的,如果您调用 Open() 并且没有出现异常,那么您就可以使用了。您应该生成一个 SQL 并使用命令对象将其发送到服务器。

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

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

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

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

于 2012-12-08T21:23:56.383 回答
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 中可用

于 2012-12-08T15:26:57.340 回答