相关疑难解决方法(0)

C#Mysql - 在async await服务器上使用数据库查询锁

TcpListener上课,我正在async/await阅读和写作.

对于这个服务器,我创建了单个数据库实例,我准备了所有数据库查询.

但是对于一个以上,TcpClient我一直在例外:

MySql.Data.MySqlClient.MySqlException发生了类型的异常,MySql.Data.dll但未在用户代码中处理

附加信息:已经有一个DataReader与此相关的开放Connection,必须先关闭.

如果我理解正确的话,那么一次数据库查询就不会超过一个async客户端.

所以我只是在我的查询中添加了锁,这样一切似乎都很好.

   // One MySqlConnection instance for whole program.

   lock (thisLock)
   {
    var cmd = connection.CreateCommand();

    cmd.CommandText = "SELECT Count(*) FROM logins WHERE username = @user AND password = @pass";
    cmd.Parameters.AddWithValue("@user", username);
    cmd.Parameters.AddWithValue("@pass", password);

    var count = int.Parse(cmd.ExecuteScalar().ToString());
    return count > 0;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用这个方法为每个查询创建新连接,如SO社区的某个人所提到的,但这个方法比锁慢得多:

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();   // This takes +- 35ms and makes worse …
Run Code Online (Sandbox Code Playgroud)

c# mysql connection ado.net async-await

10
推荐指数
1
解决办法
606
查看次数

标签 统计

ado.net ×1

async-await ×1

c# ×1

connection ×1

mysql ×1