我尝试在 MySql
中的表上运行 SELECT
,但出现此错误:
Server Error in '/MyApp' Application.
Too many connections
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: MySql.Data.MySqlClient.MySqlException: Too many connections
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[MySqlException (0x80004005): Too many connections]
MySql.Data.MySqlClient.MySqlStream.ReadPacket() +517
MySql.Data.MySqlClient.NativeDriver.Open() +702
MySql.Data.MySqlClient.Driver.Open() +245
MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings) +297
MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection() +18
MySql.Data.MySqlClient.MySqlPool.GetPooledConnection() +403
MySql.Data.MySqlClient.MySqlPool.TryToGetDriver() +228
MySql.Data.MySqlClient.MySqlPool.GetConnection() +106
MySql.Data.MySqlClient.MySqlConnection.Open() +1468
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
我使用 .net 和 C# 在 iis 上运行它。 知道如何解决这个问题吗?
这就是我如何进行选择的例子:
MySqlDataReader msdr;
MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();
string commandLine = "SELECT * FROM Table WHERE active=1;
commandLine = commandLine.Remove(commandLine.Length - 3);
cmd.CommandText = commandLine;
cmd.Connection = connect;
cmd.Connection.Open();
msdr = cmd.ExecuteReader();
while (msdr.Read())
{
//Read data
}
msdr.Close();
cmd.Connection.Close();
我是这样删除的:
MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = connect;
cmd.Connection.Open();
string commandLine = @"DELETE FROM Table WHERE id=@id;";
cmd.CommandText = commandLine;
cmd.Parameters.AddWithValue("@id", slotId);
cmd.ExecuteNonQuery();
cmd.Connection.Close();
这是我插入的方式:
MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = connect;
cmd.Connection.Open();
string commandLine = @"INSERT INTO Table (id, weekday, start, end) VALUES" +
"(@ id, @weekday, @start, @end);";
cmd.CommandText = commandLine;
cmd.Parameters.AddWithValue("@ id", id);
cmd.Parameters.AddWithValue("@weekday", item.weekday);
cmd.Parameters.AddWithValue("@start", new TimeSpan(item.starthour, item.startmin, 0));
cmd.Parameters.AddWithValue("@end", new TimeSpan(item.endhour, item.endmin, 0));
cmd.ExecuteNonQuery();
long id = cmd.LastInsertedId;
cmd.Connection.Close();
return id;
最佳答案
以上所有示例都显示出相同的弱点。你不使用 using statement这将确保连接和其他一次性元素的正确关闭和处置。如果您的一个或多个语句抛出异常,关闭连接的代码将不会执行,您可能会以连接过多错误结束
例如
string commandLine = "SELECT * FROM Table WHERE active=1";
commandLine = commandLine.Remove(commandLine.Length - 3);
using(MySqlConnection connect = new MySqlConnection(connectionStringMySql))
using(MySqlCommand cmd = new MySqlCommand(commandLine, connect))
{
connect.Open();
using(MySqlDataReader msdr = cmd.ExecuteReader())
{
while (msdr.Read())
{
//Read data
}
}
} // Here the connection will be closed and disposed. (and the command also)
关于C# MySQL 中的连接太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17255024/