命令 kill 执行线程号
C# 执行杀死指定的连接
1 强制Kill掉
internal protected void KillConnection(MySqlConnection c)
{
int threadId = c.ServerThread;
MySqlCommand cmd = new MySqlCommand("KILL " + threadId, conn);
cmd.ExecuteNonQuery();
// the kill flag might need a little prodding to do its thing
try
{
cmd.CommandText = "SELECT 1";
cmd.Connection = c;
cmd.ExecuteNonQuery();
}
catch (Exception) { }
// now wait till the process dies
bool processStillAlive = false;
while (true)
{
MySqlCommand cmdProcess = new MySqlCommand("SHOW PROCESSLIST", conn);
MySqlDataReader dr = cmdProcess.ExecuteReader();
while (dr.Read())
{
if (dr.GetInt32(0) == threadId) processStillAlive = true;
}
dr.Close();
if (!processStillAlive) break;
System.Threading.Thread.Sleep(500);
}
}
internal protected void KillPooledConnection(string connStr)
{
MySqlConnection c = new MySqlConnection(connStr);
c.Open();
KillConnection(c);
}
2 友好的关闭连接
public void CloseConnection(MySqlConnection conn)
{
if (conn != null && conn.State != ConnectionState.Closed)
{
try
{
conn.Close();
conn.Dispose();
}
catch
{
}
}
}