我的程序总是运行了一段时间之后界面就卡住,之后就提示说:
超时时间已到。超时时间已到 但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用 并且达到了最大池大小。我的代码是这样的:连接数据库的语句:
public static int GetCount(string sql, SqlParameter[] array)
{
SqlCommand cmd = handle(sql, array);
return cmd.ExecuteNonQuery();
}
public static SqlDataReader GetReader(string sql, SqlParameter[] array)
{
SqlCommand cmd = handle(sql, array);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}public static SqlCommand handle(string sql, SqlParameter[] array)
{
using (SqlConnection con = new SqlConnection(strConn))
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = sql;
if (array != null)
{
foreach (SqlParameter item in array)
{
if (item.Value == null)
{
item.Value = DBNull.Value;
}
cmd.Parameters.Add(item);
}
}
return cmd;
}
}获取数据库数据的代码:
public Users GetOneUser(int UserID)
{
SqlParameter[] array = new SqlParameter[]
{
new SqlParameter("@Id",UserID)
};
using (SqlDataReader reader = help.GetReader("select * from Users where UserID = @Id", array))
{
if (reader.Read())
{
Users user = new Users();
user.UserID = Convert.ToInt32(reader["UserID"]);
return user;
}
}
return null;
}
请大家帮我看看问题是不是出在这里,谢谢了!
超时时间已到。超时时间已到 但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用 并且达到了最大池大小。我的代码是这样的:连接数据库的语句:
public static int GetCount(string sql, SqlParameter[] array)
{
SqlCommand cmd = handle(sql, array);
return cmd.ExecuteNonQuery();
}
public static SqlDataReader GetReader(string sql, SqlParameter[] array)
{
SqlCommand cmd = handle(sql, array);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}public static SqlCommand handle(string sql, SqlParameter[] array)
{
using (SqlConnection con = new SqlConnection(strConn))
{
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = sql;
if (array != null)
{
foreach (SqlParameter item in array)
{
if (item.Value == null)
{
item.Value = DBNull.Value;
}
cmd.Parameters.Add(item);
}
}
return cmd;
}
}获取数据库数据的代码:
public Users GetOneUser(int UserID)
{
SqlParameter[] array = new SqlParameter[]
{
new SqlParameter("@Id",UserID)
};
using (SqlDataReader reader = help.GetReader("select * from Users where UserID = @Id", array))
{
if (reader.Read())
{
Users user = new Users();
user.UserID = Convert.ToInt32(reader["UserID"]);
return user;
}
}
return null;
}
请大家帮我看看问题是不是出在这里,谢谢了!
这样的话就会产生那样的问题么是啊如果服务器有最大连接数限制的话就会这样,不close的话会占用大量资源
这样的话就会产生那样的问题么是啊如果服务器有最大连接数限制的话就会这样,不close的话会占用大量资源using (SqlConnection con = new SqlConnection(strConn)) 有自动释放资源功能
但是现在用都用了。用就用了,那你Reader完之后要Close就是拉。每个地方都要Close
但是现在用都用了。用就用了,那你Reader完之后要Close就是拉。每个地方都要Close有啊 都有用using来自动释放啊
但是现在用都用了。用就用了,那你Reader完之后要Close就是拉。每个地方都要Close有啊 都有用using来自动释放啊谁跟你说的using会自动Close..
using只会自动dispose
谁让你这样写数据库连接的 啊,最好自己手动CLOSE掉,别老想靠系统去回收连接
重头到尾没见到一个CLOSE你的代码