MySql连接在不同的c#类中

本文关键字:类中 连接 MySql | 更新日期: 2023-09-27 18:03:24

好的,所以我是c#的新手,我试图将我的Mysql连接字符串移动到另一个类,但我似乎无法打开连接,一旦我调用该方法,我真的看不出有什么问题。

这是一个新类(DatabaseC)

中的连接方法
public static void Connection()
    {
        try
        {
            ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["cs"];
            string conn = conSettings.ConnectionString;
            MySqlConnection connect = new MySqlConnection(conn);
            connect.Open();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

这里我在Form

中调用方法
private bool validate_login(string u, string p)
    {
        DatabaseC.Connection();
        MySqlCommand cmd = new MySqlCommand();
        cmd.CommandText = "SELECT * FROM account WHERE Password COLLATE latin1_general_cs = @password AND User COLLATE latin1_general_cs = @username";
        cmd.Parameters.AddWithValue("@username", u);
        cmd.Parameters.AddWithValue("@password", p);
        MySqlDataReader login = cmd.ExecuteReader();
    }

抱歉,如果代码看起来很糟糕,但正如我所说的,我是新的。

MySql连接在不同的c#类中

您应该返回已打开的MySqlConnection的实例

public static MySqlConnection Connection()
{
    ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["cs"];
    string conn = conSettings.ConnectionString;
    MySqlConnection connect = new MySqlConnection(conn);
    connect.Open();
    return connect;
}

现在你可以改变你的调用代码来接收连接并使用它

private bool validate_login(string u, string p)
{
    using(MySqlConnection cnn = DatabaseC.Connection())
    using(MySqlCommand cmd = cnn.CreateCommand())
    {
        cmd.CommandText = "......"
        ...
        using(MySqlDataReader reader = cmd.ExecuteReader())
        {
           .....
        }  // Here the reader is closed and destroyed
    } // Here the connection closed and destroyed with the command 
}

请注意,连接是一个一次性对象,因此您应该确保在使用结束后销毁它。这是using语句的工作。

这段代码的另一个问题是命令需要知道要使用的连接,您的实际代码没有将命令与连接链接起来,因此它无法工作。

编辑:你下面的评论应该添加到答案中。应该删除连接方法中的Try/Catch。这里什么也不做,捕获异常只会在需要处理空返回值的调用代码中造成复杂性。最好让异常冒泡,直到有一个方法与之相关(例如,记录它)

实际上您需要打开正在使用连接的连接,请尝试以下方法

public static MySqlConnection Connection()
    {
        try
        {
            ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["cs"];
            string conn = conSettings.ConnectionString;
            MySqlConnection connect = new MySqlConnection(conn);
            return connect;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
然后

private bool validate_login(string u, string p)
    {
        DatabaseC.Connection().Open();
        MySqlCommand cmd = new MySqlCommand();
        cmd.CommandText = "SELECT * FROM account WHERE Password COLLATE latin1_general_cs = @password AND User COLLATE latin1_general_cs = @username";
        cmd.Parameters.AddWithValue("@username", u);
        cmd.Parameters.AddWithValue("@password", p);
        MySqlDataReader login = cmd.ExecuteReader();