【发布时间】:2016-10-06 16:19:57
【问题描述】:
我正在使用连接类进行连接,然后调用该类进行连接。
在我多次使用连接后,它会冻结,然后出现错误。似乎我同时打开了许多连接我无法弄清楚如何关闭打开的连接。如果那是真正的问题。
MyConnection类:
public class MyConnection
{
private SqlConnection _con;
public SqlCommand Cmd;
private SqlDataAdapter _da;
private DataTable _dt;
public MyConnection()
{
_con = new SqlConnection("Data Source=192.168.1.12\\grs;Initial Catalog=BGI;Persist Security Info=True;User ID=awplanung;Password=pass");
_con.Open();
}
public void SqlQuery(string queryText)
{
Cmd = new SqlCommand(queryText, _con);
}
public DataTable QueryEx()
{
_da = new SqlDataAdapter(Cmd);
_dt = new DataTable();
_da.Fill(_dt);
return _dt;
}
public void NonQueryEx()
{
Cmd.ExecuteNonQuery();
}
}
现在我从我的表单中调用这个连接:就像这个。
MyConnection con = new MyConnection();
con.SqlQuery("SELECT ARartikelnr ,ARartikelbezeich, ARartwarengruppe, ARanzahleinheiten, ARinhalteinheiten, ARanzgebindepal FROM BGARTIKEL where ARartikelnr BETWEEN '" + textBox2.Text + "' and '" + textBox3.Text + "' order by ARinhalteinheiten, ARartwarengruppe");
dt = con.QueryEx();
每次我打开一个新表单时,我都会做一个
MyConnection con = new MyConnection();
做很多类似的
con.SqlQuery("Select string")
打开第二个表单后,当我进行新的长选择时,它会冻结。奇怪的是,我使用这两种形式没有问题,但在第一种形式中,我用一个按钮填充了数据网格。现在我更改了是否直接从表单加载中填写。当我转到下一个表单时,我无法在新表单上填写我的其他数据网格,从而给出该错误。
错误:
超时。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且已达到最大池大小。
【问题讨论】:
-
您应该创建一个连接,使用它,然后处理它。你可能不是。完成后不要再处理您的连接。
-
既然您知道如何解决手头的问题,您需要阅读、理解并开始使用参数化查询。您发布的是教科书示例,说明了如何不创建查询。你不应该直接执行从最终用户那里收到的文本。
标签: sql-server connection connection-timeout