C#,SQL Server数据库,连接超时。从池中获取连接之前经过的超时时间

时间:2016-10-06 16:19:58

标签: sql-server connection connection-timeout

我正在使用连接类进行连接,然后调用该类进行连接。

我多次使用连接后会冻结,然后出错。似乎我已经打开了许多连接,同时我无法弄清楚如何关闭打开的连接。如果那是真正的问题。

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")

打开第二个表单后,当我进行新的长选择时,它会冻结。奇怪的是,我已经毫无问题地使用了这两种形式,但在第一种形式中,我使用按钮进行了数据网格填充。现在我改变了如果直接从表单加载填充。当我转到下一个表单时,我无法在新表单上填充我的其他数据网格,从而产生错误。

错误:

  

超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。

1 个答案:

答案 0 :(得分:2)

使您的MyConnection类一次性使用。完成数据后将其丢弃。

  1. 在类
  2. 上实现IDisposable接口
      

    (公共类MyConnection:IDisposable)

    1. 实现处置连接的Dispose方法
    2.   

      public void Dispose()       {       _con.Dispose();       }

      1. 并像这样使用
      2.   

        使用(MyConnection con = new MyConnection())       {           con.SqlQuery( “...”);           dt = con.QueryEx();       }