不同类C#中的MySql连接

时间:2016-08-22 17:26:12

标签: c# mysql

Okey,所以我是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);
        }
    }

在这里,我在表单中调用该方法

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

很抱歉,如果代码看起来很糟糕,但正如我刚才所说的那样。

2 个答案:

答案 0 :(得分:3)

您应该返回已打开的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语句的工作。

使用此代码修复的另一个问题是,命令需要知道要使用的连接,实际代码不会将命令与连接相关联,因此无法正常工作。

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

答案 1 :(得分:0)

实际上你需要打开你正在使用连接的连接,试试这种方式

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();