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();
}
抱歉,如果代码看起来很糟糕,但正如我所说的,我是新的。
您应该返回已打开的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();