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();
}
很抱歉,如果代码看起来很糟糕,但正如我刚才所说的那样。
答案 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();